PyODBC: kann den Treiber nicht öffnen, auch wenn er existiert

Ich bin neu in der Linux-Welt und ich möchte einen Microsoft SQL server von Python abfragen. Ich habe es auf Windows benutzt und es war ganz gut, aber bei Linux ist es sehr schmerzhaft.

Nach einigen Stunden gelingt es mir endlich, den Microsoft ODBC-Treiber unter Linux Mint mit unixODBC zu installieren.

Dann habe ich eine Anaconda mit Python 3 Umgebung eingerichtet.

Ich mache das dann:

import pyodbc as odbc sql_PIM = odbc.connect("Driver={ODBC Driver 13 for SQL server};server=XXX;Database=YYY;Trusted_Connection=Yes") 

Es kehrt zurück:

 ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found (0) (SQLDriverConnect)") 

Die Sache, die ich nicht undertsand ist, ist, dass PyODBC scheint, den rechten filepfad von odbcinst.ini zu lesen und arbeitet immer noch nicht.

Ich ging zu "/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0" und die file existiert wirklich!

Warum sagt es mir also, dass es nicht existiert? Hier sind einige mögliche Hinweise:

  • Ich bin auf einer virtuellen Umgebung
  • Ich muss "gelesen" Rechte haben, weil es ein Root-filepfad ist

Ich weiß nicht, wie man eines dieser Probleme lösen kann.

Vielen Dank !

Ich hatte auch das gleiche Problem auf Ubuntu 14 nach dem Microsoft Tutorial für SQL server Linux ODBC Driver ( https://msdn.microsoft.com/en-us/library/hh568454%28v=sql.110%29.aspx?f = 255 & MSPPError = -2147217396 ).

Die file existiert und nach dem Ausführen einer ldd, zeigte es, dass es Abhängigkeiten fehlte:

/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0) /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version CXXABI_1.3.8 ' nicht gefunden (erforderlich von

nach der search nach einer Weile fand ich, weil Ubuntus Repo nicht GLIBCXX auf Version 3.4.20 hatte, war es um 3.4.19.

Ich habe dann ein Repo zu Ubuntu hinzugefügt, es aktualisiert und es gezwungen, libstdc ++ 6 zu aktualisieren

 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get upgrade sudo apt-get install libstdc++6 

Problem getriggers, getestet mit isql:

 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> 

Danach habe ich versucht, mit pdo_odbc (PHP) zu testing, es gab mir dann den gleichen Treiber nicht gefunden Fehler. Um dies zu lösen musste ich einen symbolischen Link zu beheben libodbcinst.so.2:

sudo ln -s /usr/lib64/libodbcinst.so.2 /lib/x86_64-linux-gnu/libodbcinst.so.2

Ich habe eine Antwort gefunden, die hier für mich arbeitet. Dies ist für python 2.7 (also kann nicht für diejenigen, die für eine Lösung für Python 3.x suchen) zu arbeiten.

Die vorgeschlagene Lösung ist, libgcc zu aktualisieren: 4.8.5-2 -> 5.2.0-0

Für die Aktualisierung von libgcc verwenden Sie diesen Befehl

 conda update libgcc 

Ich hatte das gleiche Problem 'file nicht gefunden (0) (SQLDriverConnect)' auf MAC OS mit dem folgenden Code

cnxn = pyodbc.connect (' DRIVER = {ODBC-Treiber 13 für SQL server} ; SERVER = myserverIP, 1433; DATABASE = myDBName; UID = sa; PWD = dbPassword')

nach googeln für zwei tage kann ich das problem nicht beheben auch die freetds.conf, odbcinst.ini und odbc.ini ändern

endlich habe ich die Lösung gefunden, indem ich den DRIVER- Wert ersetzst

cnxn = pyodbc.connect (' DRIVER = {/ usr / local / lib / libmsodbcsql.13.dylib} ; SERVER = myserverIP, 1433; DATABASE = myDBName; UID = sa; PWD = dbPassword')

Meine dev Umgebung

  • MAC OS EI Capitan
  • python 3.6.1 in Anconda