2012-08-15 17 views
9

Sto provando a connettermi a un server Microsoft SQL dalla macchina di sviluppo Mac usando iODBC. Non importa cosa faccio, ricevo il messaggio di errore Unable to connect to data source dal driver FreeTDS. Dopo aver consultato vari manuali, post di blog e domande StackOverflow, sono alla fine del mio spirito.Connessione a MS SQL Server con iODBC su Mac

Sto usando Mac OS X 10.7.4, con la versione 0.91 di FreeTDS installata tramite Homebrew. Ecco quello che sto facendo:

$ brew install freetds 
$ mkvirtualenv odbc 
$ workon odbc 
$ pip install pyodbc 

$ tsql -H localhost -U mydbusername -P mydbpassword -p 1433 
locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
using default charset "UTF-8" 
1> quit 

I collega di cui sopra e le opere, ma:

$ iodbctest 
iODBC Demonstration program 
This program shows an interactive SQL processor 
Driver Manager: 03.52.0607.1008 

Enter ODBC connect string (? shows list): driver={TDS};server=localhost;uid=mydbusername;pwd=mydbpassword;database=mydbname 
1: SQLDriverConnect = [FreeTDS][SQL Server]Unable to connect to data source (0) SQLSTATE=08001 
1: ODBC_Connect = [FreeTDS][SQL Server]Unable to connect to data source (0) SQLSTATE=08001 

Dal momento che sto in ultima analisi, la pianificazione di usarlo attraverso pyodbc, ho provato così:

$ python 
Python 2.7.3 (default, Jun 22 2012, 00:35:38) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pyodbc 
>>> c = pyodbc.connect(driver='/usr/local/lib/libtdsodbc.so', host='localhost', name='mydbname', uid='mydbusername', pwd='mydbpassword') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
pyodbc.Error: ('08001', '[08001] [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)') 

Ho provato tutti i tipi di cose suggerite nei post di blog e post SO ... creando DSN in Amministratore ODBC, creando un ~/.odbc.ini, tentando di usare unixODBC (che non funzionava con PyODBC), specificando un stringa di connessione invece di parole chiave args, ecc. Ho anche prodotto un file di traccia tramite iODBC, che ho incollato here, ma non ho potuto raccogliere più informazioni da esso che dal messaggio di errore.

(Devo dire che io sono il tunneling della connessione a SQL Server su SSH con la linea LocalForward localhost:1433 production.someinstitution.edu:1433 nel mio ~/.ssh/config, dato che il mio reparto IT mi ha limitato per collegare solo dal IP del server di produzione. Si lavora per un client GUI (SQuirreLSQL) quindi presumo che l'inoltro sia corretto.)

+2

Hai specificato porto di stringa di connessione pyodbc? – sunprophit

+0

I ** sapeva ** doveva essere qualcosa di semplice che mi mancava! Grazie mille sole. Notato per riferimento futuro: FreeTDS (o iODBC?) Non ha un concetto di porta "predefinita" per un driver. – josePhoenix

+0

@sunprophit: appena controllato, funziona perfettamente ora! Puoi pubblicarlo come risposta in modo che io possa votare/accettarlo? – josePhoenix

risposta

3

È necessario utilizzare il parametro 'porta' nella stringa di connessione in caso di connessione senza DSN.

In caso contrario la porta potrebbe essere specificato nella DSN o il driver di configurazione (odbc.ini e freetds.conf rispettivamente)

+1

Parte del motivo per cui è stato necessario così tanto tempo è stato che il codice esatto funzionava sul mio server con Ubuntu e unixODBC con FreeTDS. Lì, potrei omettere il numero di porta e le cose funzionerebbero ancora. (Speriamo che se avrò abbastanza parole chiave pertinenti in questa domanda e nei commenti, nessuno dovrà perdere tempo come ho fatto io!) – josePhoenix

Problemi correlati