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", и файл действительно существует!
Так почему это говорит мне, что этого не существует?
Вот некоторые возможные подсказки:
- Я нахожусь в виртуальной среде
- Мне нужно иметь права на чтение, потому что это корневой путь к файлу
Я не знаю, как решить любую из этих проблем.
Спасибо!
Ответы
Ответ 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... имена должны совпадать, а также путь к драйверу.