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)")
вещь, которую я не undertsand кажется, что PyODBC читает правильный путь к файлу из odbcinst.ini и до сих пор не работает.
Я пошел в " / opt/microsoft/msodbcsql/lib64 / libmsodbcsql-13.0.Итак.0.0 " и файл действительно существует !
Так почему же он говорит мне, что его не существует ? Вот некоторые возможные подсказки:
- Я нахожусь в виртуальной среде
- мне нужно иметь права "читать", потому что это корневой путь к файлу
Я не знаю, как решить либо из этих проблем.
спасибо !
6 ответов
у меня также была такая же проблема на Ubuntu 14 после выполнения учебника microsoft для драйвер ODBC для SQL Server Linux.
файл существует, и после запуска ldd он показал, что отсутствуют зависимости:
/опт/Майкрософт/msodbcsql/lib64/libmsodbcsql-13.0.так.0.0: в файле /usr/lib в/x86_64 с-линукс-дистрибутив GNU/libstdc++в.так.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.икс.)
предлагаемое решение-обновить libgcc: 4.8.5-2 --> 5.2.0-0
для обновления libgcc используйте эту команду
conda update libgcc
У меня была такая же проблема ' файл не найден (0) (SQLDriverConnect)' на MAC OS со следующим кодом
cnxn = pyodbc.подключение('DRIVER={ODBC драйвер 13 для SQL Server}; SERVER=myServerIP, 1433; DATABASE=myDBName;UID=sa;PWD=dbPassword')
после googling в течение двух дней, я не могу исправить проблему даже изменить freetds.conf, odbcinst.ini и odbc.ini
наконец, я нашел решение по замене водитель стоимостью
cnxn = pyodbc.подключение('DRIVER={/usr/local/lib / libmsodbcsql.13.dylib нужна}; SERVER=myServerIP, 1433; DATABASE=myDBName;UID=sa;PWD=dbPassword')
мой Дев среды
- MAC OS EI Capitan
- python 3.6.1 в Anconda
следующие предложения могут помочь решить эту проблему:
- убедитесь, что INI-файл конфигурации диска существует
odbcinst -j
(Регистрацияodbcinst.ini
). - убедитесь, что путь к файлу для настроенного драйвера из вашего INI-файла (run:
odbcinst -j
) существует и имеет флаги разрешения чтения и исполняемого файла (O_RDONLY|O_CLOEXEC
). -
если у вас все еще есть не нашел ошибка, несмотря на файл существует, проблема может быть связана с
libgcc
несоответствие версий согласно комментарий GitHub нехальвани. Решение заключается в обновлении вашегоlibgcc
под управлением . для macOS, см.: установка ODBC через HomeBrew.
может быть, немного поздно, но я оставляю эти сценарии, которые работали для меня.
моя проблема была такой же, как у вас, и я протестировал все параметры, такие как изменение местоположения драйвера, создание символической ссылки, изменение /etc/*.ini-файлы и т. д... ничего не помогало.
моя проблема, запуск python 3.6, пакет pyodbc в контейнере docker из alpine была библиотека libssl1.0.0
здесь вы найдете мой сценарий установки для pyodbc Debian 8 (alpine) docker image использование драйвера v13
DRIVER={ODBC драйвер 13 для SQL Server}
команда, которую я запускаю для подключения к базе данных, была:
import pyodbc
connection_string = 'DRIVER={ODBC Driver 13 for SQL Server};'
connection_string += 'SERVER={0};DATABASE={1};UID={2};PWD={3};'.format(host,dbname,user,pwd)
connection = pyodbc.connect(connection_string)
была такая же проблема один раз.. 1.попробуйте conda update libgcc (это потому, что pyodbc, установленный через pip и conda, ищет разные версии файла..)..это могло быть исправлено ..... ссылка:https://github.com/ContinuumIO/anaconda-issues/issues/1639 искать nehaljwani ответа .
2.также проверьте номер версии файла odbc в файле /etc/odbcinst.ini и / etc / odbc.ini ...имена должны совпадать, а также путь драйвера.