web-dev-qa-db-de.com

Kann 'lib' ODBC-Treiber 13 für SQL Server nicht öffnen? Sym Linking-Problem?

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?

21
emehex

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.

36
emehex

In meinem Fall muss ich die pyodbc-Datenbanktreiberzeichenfolge in ändern
driver='{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.

16
Uzzal Podder

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
4
Rene B.

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
1
KevinQiang

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, } }

0
Patrick