Подтвердить что ты не робот

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

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

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

Затем я установил anaconda с средой 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", и файл действительно существует!

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

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

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

Спасибо!

4b9b3361

Ответ 1

У меня также была та же проблема на Ubuntu 14 после того, как после учебника по Microsoft для Драйвер ODBC для SQL Server Linux.

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

/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 'не найден (требуется

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

Затем я добавил репо в Ubuntu, обновил его и принудительно обновил libstdС++ 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

Ответ 2

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

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

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

conda update libgcc

Ответ 3

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

CnXn = pyodbc.connect( ' ВОДИТЕЛЬ = {Драйвер ODBC 13 для SQL Server}; SERVER = myServerIP 1433; БАЗА ДАННЫХ = myDBName; UID = са; PWD = DBPassword')р >

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

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

cnxn = pyodbc.connect( ' ВОДИТЕЛЬ = {/USR/локальные/Library/libmsodbcsql.13.dylib}; SERVER = myServerIP 1433; БАЗА ДАННЫХ = myDBName; UID = са; PWD = DBPassword')

My dev environment

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

Ответ 4

Следующие рекомендации могут помочь решить проблему:

Ответ 5

была одна и та же проблема... 1.try conda update libgcc (это потому, что pyodbc установлен через pip и conda для поиска разных версий файла..).. это могло быть исправлено..... ссылка: https://github.com/ContinuumIO/anaconda-issues/issues/1639 ищите ответ нехалвани.

2. Также проверьте номер версии файла odbc правильно в /etc/odbcinst.ini и/etc/odbc.ini... имена должны совпадать, а также путь к драйверу.