2017-06-13 1 views
6

Lorsque je tente de se connecter à une base de données de serveur SQL avec pyodbc (sur mac):Impossible d'ouvrir le 'lib' ODBC Driver 13 pour SQL Server '? Problème de liaison Sym?

import pyodbc 

server = '####' 
database = '####' 
username = '####@####' 
password = '#####' 
driver='{ODBC Driver 13 for SQL Server}' 

pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+password) 

Je reçois l'erreur suivante:

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found (0) (SQLDriverConnect)")

Quand je chemin dans l'emplacement du pilote réel:

driver='/usr/local/lib/libmsodbcsql.13.dylib' 

Il commence à fonctionner!

Mon odbcinst.ini ressemble à ceci:

[ODBC Driver 13 for SQL Server] 
Description=Microsoft ODBC Driver 13 for SQL Server 
Driver=/usr/local/lib/libmsodbcsql.13.dylib 
UsageCount=1 

Comment puis-je obtenir ma référence à driver='{ODBC Driver 13 for SQL Server}' pour commencer à travailler? J'ai d'abord utilisé this guide pour installer le pilote. Et j'utilise anaconda sur Mac Sierra si ça aide?

+0

Jetez un coup d'œil à [cette réponse] (https://stackoverflow.com/a/28488604/2144390). Votre fichier odbcinst.ini peut ne pas être à l'emplacement attendu par unixODBC (et/ou anaconda). –

Répondre

12

Course à pied:

odbcinst -j 

n'a donné:

unixODBC 2.3.4 
DRIVERS............: /etc/odbcinst.ini 
SYSTEM DATA SOURCES: /etc/odbc.ini 
FILE DATA SOURCES..: /etc/ODBCDataSources 
USER DATA SOURCES..: /Users/emehex/.odbc.ini 
SQLULEN Size.......: 8 
SQLLEN Size........: 8 
SQLSETPOSIROW Size.: 8 

Au lieu de copier les fichiers dans le répertoire /etc/ (ne sais pas pourquoi unixODBC pensait qu'ils étaient là) j'ai créé un lien symbolique vers chaque fichier:

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini 
sudo ln -s /usr/local/etc/odbc.ini /etc/odbci.ini 

Cela a résolu le problème!

+0

Bonne solution - pour répondre à votre question. UnixODBC recherche par défaut 'odbc.ini' et' odbcinst.ini' dans '/ etc'. Il vérifiera également le répertoire personnel de l'utilisateur pour '.odbc.ini' et' .odbcinst.ini'. (FreeTDS fait la même chose avec 'freetds.conf' /' .freetds.conf', pour l'enregistrement.) – FlipperPA

+0

Cela fonctionne (bien que je devais désinstaller et réinstaller le pilote https://docs.microsoft.com/fr-fr/sql/connect/odbc/linux-mac/installation-le-microsoft-odbc-driver-for-sql-server), mais il y a une petite faute de frappe: '' 'sudo ln -s/usr/local/etc/odbc. ini/etc/odbc.ini''' – alexvicegrab

+0

Cette erreur peut également se produire si vous avez mis à jour une nouvelle version du pilote. Si le fichier est présent, vérifiez le contenu de /etc/odbcinst.ini soit: $ cat/etc/odbcinst.ini [ODBC Driver 17 pour SQL Server] Description = Microsoft pilote ODBC 17 pour SQL Server Driver =/opt/microsoft/msodbcsql/lib64/libmsodbcsql-17.0.so.1.1 UsageCount = 1 Ensuite Mise à jour le contenu de votre scipt pour utiliser le nouveau pilote. Dans ce cas, le pilote a été mis à jour de la version 13 à la version 17. Je vous suggère d'ajouter cette information pour être complet. – earnshae

1

Dans mon cas, je dois changer la chaîne de pilote de base de données pyodbc à
driver='{ODBC Driver 17 for SQL Server}'

En fait, dans mon code python de pyodbc s'attendait le pilote ODBC 13
mais, comme la version du pilote ODBC a été mis à jour (en raison de la mise à jour d'ubuntu) à la version actuelle Pilote ODBC 17, le problème est survenu.