Lorsque j'essaie de me connecter à une base de données de serveur SQL avec pyodbc (sur mac):
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:
Erreur: ('01000', "[01000] [unixODBC] [Gestionnaire de pilotes] Impossible d'ouvrir lib" Pilote ODBC 13 pour SQL Server ': fichier introuvable (0) (SQLDriverConnect) ")
Lorsque je parcours dans l'emplacement actuel du pilote:
driver='/usr/local/lib/libmsodbcsql.13.dylib'
Cela 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 recommencer à travailler?
J'ai initialement utilisé ce guide pour installer le pilote. Et j'utilise anaconda sur Mac Sierra si cela aide?
Fonctionnement:
odbcinst -j
Il 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/
(je 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/odbc.ini
Cela a résolu le problème.
Dans mon cas, je dois changer la chaîne du pilote de la base de données pyodbc
endriver='{ODBC Driver 17 for SQL Server}'
en fait, dans mon code python, pyodbc attendait ODBC Pilote 13
mais comme la version du pilote ODBC a été mise à jour (en raison de la mise à jour d'ubuntu) vers la version actuelle ODBC pilote 17 , le problème s'est produit.
Dans mon cas, j'ai un Mac OS et les commandes suivantes ont résolu le problème:
brew tap Microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install --no-sandbox msodbcsql mssql-tools
Je dois ajouter que si vous utilisez un pilote différent (FreeTDS) et que vous omettez de le mentionner dans votre chaîne de connexion, il sera par défaut à driver='{ODBC Driver 17 for SQL Server}
ou quelque chose comme ça.
Donc, la solution est de ne pas oublier le pilote, vos paramètres de base de données ressembleront à ceci:
'default': {
'ENGINE': 'sql_server.pyodbc',
'Host': '127.0.0.1',
'NAME': 'mydb',
'PORT': '1433',
'USER': 'sa',
'PASSWORD': '*****',
'OPTIONS':{
'driver': 'FreeTDS',
'Host_is_server': True,
}
}