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
eunixodbc-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:
'mssql+pyodbc://ar_user:[email protected]/master'
'mssql+pyodbc://ar_user:[email protected]:1433/master'
'mssql+pyodbc://IE10WIN8\\SQLEXPRESS'
'mssql+pyodbc://ar_user:[email protected]\\SQLEXPRESS'
'mssql+pyodbc://ar_user:[email protected]\\SQLEXPRESS:1433'
'mssql+pyodbc://ar_user:[email protected]\\SQLEXPRESS:1433/master'
... 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?
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. –
Gord è sulla destra, DSN è la strada da percorrere. Inoltre, assicurati di aver inoltrato le porte appropriate (1433) dalla VM guest all'host Mac. – FlipperPA
controlla le mie note aggiornate;) – daveoncode