Wenn ich versuche, mich mit pyodbc (auf einem Mac) mit einer SQL Server-Datenbank zu verbinden:
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)
Ich erhalte folgende Fehlermeldung:
Fehler: ('01000', "[01000] [unixODBC] [Treibermanager] Kann nicht geöffnet werden. 'ODBC-Treiber 13 für SQL Server': Datei nicht gefunden (0) (SQLDriverConnect)")
Wenn ich am tatsächlichen Standort des Fahrers gehe:
driver='/usr/local/lib/libmsodbcsql.13.dylib'
Es fängt an zu arbeiten!
Mein odbcinst.ini
sieht so aus:
[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.13.dylib
UsageCount=1
Wie kann ich meine Referenz zu driver='{ODBC Driver 13 for SQL Server}'
erhalten, um wieder zu arbeiten?
Ich habe anfangs diese Anleitung verwendet, um den Treiber zu installieren. Und ich verwende Anaconda auf Mac Sierra, wenn das hilft?
Laufen:
odbcinst -j
Es ergab:
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
Anstatt die Dateien in das Verzeichnis /etc/
zu kopieren (nicht sicher, warum UnixODBC sie für vorhanden hielt), erstellte ich einen symbolischen Link zu jeder Datei:
Sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
Sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini
Dies hat das Problem gelöst.
In meinem Fall muss ich die pyodbc
-Datenbanktreiberzeichenfolge in änderndriver='{ODBC Driver 17 for SQL Server}'
eigentlich in meinem Python-Code pyodbc erwartete ODBC Treiber 13
Da jedoch die Treiberversion ODBC (aufgrund des Ubuntu-Updates) auf die aktuelle Version ODBC Driver 17 aktualisiert wurde, trat das Problem auf.
In meinem Fall habe ich ein Mac OS und die folgenden Befehle haben das Problem behoben:
brew tap Microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install --no-sandbox msodbcsql mssql-tools
In meinem Fall habe ich das Problem in drei Schritten behoben:
# Step1: install unixodbc
brew install unixodbc
# Step2: install Microsoft ODBC Driver for SQL Server on MacOS
brew tap Microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools
# Step3:verify odbcinst configuration path is correct
odbcinst -j
Sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
Sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini
Ich muss hinzufügen, dass wenn Sie einen anderen Treiber (FreeTDS) verwenden und in Ihrer Verbindungszeichenfolge nicht erwähnt werden, wird driver='{ODBC Driver 17 for SQL Server}
oder ähnliches standardmäßig verwendet.
Die Lösung besteht also darin, den Treiber nicht zu vergessen. Ihre DB-Einstellungen sehen dann so aus:
'default': {
'ENGINE': 'sql_server.pyodbc',
'Host': '127.0.0.1',
'NAME': 'mydb',
'PORT': '1433',
'USER': 'sa',
'PASSWORD': '*****',
'OPTIONS':{
'driver': 'FreeTDS',
'Host_is_server': True,
}
}