PyODBC: невозможно открыть драйвер, даже если он существует

Я новичок в мире Linux, и я хочу запросить Microsoft SQL Server с Python. Я использовал его в Windows, и это было прекрасно, но в Linux это довольно болезненно.

Через несколько часов мне наконец удалось установить драйвер Microsoft ODBC на Linux Mint с помощью unixODBC.

Затем я создал анаконду с окружением python 3.

Затем я делаю это:

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

Он возвращает:

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

Я не понимаю, что PyODBC, похоже, читает правильный путь к файлу из odbcinst.ini и по-прежнему не работает.

Я перешел на «/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0», и файл действительно существует!

Так почему это говорит мне, что этого не существует? Вот некоторые возможные подсказки:

  • Я нахожусь в виртуальной среде
  • Мне нужно иметь права на чтение, потому что это корневой путь к файлу

Я не знаю, как решить любую из этих проблем.

Благодаря !

У меня также была та же проблема на Ubuntu 14 после выполнения руководства по Microsoft для драйвера ODBC для SQL Server Linux ( https://msdn.microsoft.com/en-us/library/hh568454%28v=sql.110%29.aspx?f = 255 & MSPPError = -2147217396 ).

Файл существует, и после запуска ldd он показал, что отсутствовали зависимости:

/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: версия 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 ' не найден (требуется

после поиска какое-то время я нашел его, потому что у репо Ubuntu не было GLIBCXX версии 3.4.20, это было на 3.4.19.

Затем я добавил репо в Ubuntu, обновил его и заставил его обновить libstdc ++ 6

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

Проблема решена, проверена с помощью isql:

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

После этого я попробовал тестирование с помощью pdo_odbc (PHP), а затем дал мне тот же самый драйвер, который не нашел ошибку. Чтобы решить эту проблему, мне пришлось создать символическую ссылку для исправления libodbcinst.so.2:

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

Я нашел ответ, который работает для меня здесь . Это для python 2.7 (так что может не работать для тех, кто ищет решение для python 3.x).

Предлагаемое решение – обновить libgcc: 4.8.5-2 -> 5.2.0-0

Для обновления libgcc используйте эту команду

 conda update libgcc 

У меня была такая же проблема «файл не найден (0) (SQLDriverConnect)» на MAC OS со следующим кодом

cnxn = pyodbc.connect (' DRIVER = {драйвер ODBC 13 для SQL Server} ; SERVER = myServerIP, 1433; DATABASE = myDBName; UID = sa; PWD = dbPassword)

после googling в течение двух дней, я не могу исправить проблему даже изменить freetds.conf, odbcinst.ini и odbc.ini

наконец, я нашел решение, заменив значение DRIVER

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

Моя среда dev

  • MAC OS EI Capitan
  • python 3.6.1 в Анконде