2016-01-10 22 views
5

Sto cercando di connettersi a un database di SQL Server Express utilizzando SQLAlchemy e pyodbc, ma sto continuamente ricevendo l'errore:connettersi a SQL Server utilizzando SQLAlchemy

(pyodbc.Error) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')

E io davvero non capisco se l'URL del mio motore è sbagliato o cos'altro. mio scenario è il seguente:

  • Sono su un Mac
  • Ho un finestra mobile contenitore (sulla base di un'immagine di Debian con unixodbc e unixodbc-dev) in cui i miei pitone app tentativi per connettersi a ...
  • a virtualbox virtual machine in esecuzione windows 8 con SQL express 2014 ...

Ho configurato un utente per l'espresso SQL, con l'autenticazione di SQL Server:

  • utente: ar_user
  • password ar_psw

... poi:

  • Ho configurato le porte TCP come 1433 e le porte dinamiche disabilitate (Gestione configurazione SQL Server> Configurazione di rete azioni> Protocolli).
  • Ho disattivato Windows Firewall.
  • Ho usato un adattatore host-solo per la VM in esecuzione Windows8

ora ...

La VM è accessibile dall'host (mio mac), dal momento che una:

ping -c 3 vm-ip 

successo!

Ma anche se ho provato ogni possibile permutazione di utente, la password, IP, il nome del server e la porta:

... e molti altri!

Ricevo sempre l'errore "origine dati non trovata". Cosa devo fare?

ps: il vm è pingable anche nel contenitore docker!

UPDATE (risolto ma non al 100%):

ho risolto in questo modo:

ho configurato conducente FreeTDS utilizzando /etc/odbcinst.ini in questo modo:

[FreeTDS] 
Description = TDS driver (Sybase/MS SQL) 
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so 
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so 
client charset = UTF-8 

e in /etc/freetds/freetds.conf:

[global] 
tds version = 7.3 
client charset = UTF-8 

Poi ho creato il motore utilizzando la seguente stringa:

'mssql+pyodbc://my_user:[email protected]_ip:1433/my_db?driver=FreeTDS' 

Sembra funzionare correttamente, ma ottengo questo avvertimento:

SAWarning: Unrecognized server version info '95.12.255'. Version specific behaviors may not function properly. If using ODBC with FreeTDS, ensure TDS_VERSION 7.0 through 7.3, not 4.2, is configured in the FreeTDS configuration.

ho anche definito la versione TDS utilizzando le variabili d'ambiente, ma doesn' t risolvere il problema ... qualche idea?

+1

controllare la documentazione [qui] (http://docs.sqlalchemy.org/ it/ultima/dialetti/mssql.html # collegamento-to-pyodbc). È necessario fornire un nome DSN (come definito nel file "odbc.ini") oppure è necessario fornire esplicitamente il nome 'driver =' nell'URL della connessione. Nel tuo caso, una connessione DSN sarebbe probabilmente la scelta più sicura. –

+0

Gord è sulla destra, DSN è la strada da percorrere. Inoltre, assicurati di aver inoltrato le porte appropriate (1433) dalla VM guest all'host Mac. – FlipperPA

+0

controlla le mie note aggiornate;) – daveoncode

risposta

3

Ho scritto un tutorial here su come eseguire questa operazione. In sostanza, è necessario:

  1. brew install unixodbc
  2. brew install freetds --with-unixodbc
  3. aggiungere il driver FreeTDS a ODBCINST.INI
  4. Aggiungi un DSN (Domain Name Source) per ODBC.ini chiamato "MY_DSN"
  5. pip install pyodbc
  6. e = create_engine("mssql+pyodbc://username:[email protected]_DSN")

The walkthrough here esegue un lavoro molto più approfondito, compresi i problemi relativi alla compatibilità della versione del protocollo SQL Server/FreeTDS.

Problemi correlati