Не удается открыть lib 'драйвер ODBC 13 для SQL Server'? Проблема с привязкой Sym?
Когда я пытаюсь подключиться к базе данных sql-сервера с помощью pyodbc (на mac):
import pyodbc
server = '####'
database = '####'
username = '####@####'
password = '#####'
driver='{ODBC Driver 13 for SQL Server}'
pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+password)
Я получаю следующую ошибку:
Ошибка: ('01000', "[01000] [unixODBC] [Менеджер драйверов] Не удается открыть lib 'драйвер ODBC 13 для SQL Server': файл не найден (0) (SQLDriverConnect)" )
Когда я укажу путь в фактическом местоположении драйвера:
driver='/usr/local/lib/libmsodbcsql.13.dylib'
Он начинает работать!
Мой odbcinst.ini
выглядит следующим образом:
[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.13.dylib
UsageCount=1
Как я могу получить ссылку на driver='{ODBC Driver 13 for SQL Server}'
, чтобы начать работать снова?
Первоначально я использовал это руководство для установки драйвера. И я использую anaconda на Mac Sierra, если это помогает?
Ответы
Ответ 1
Бег:
odbcinst -j
Это дало:
unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /Users/emehex/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
Вместо того, чтобы копировать файлы в каталог /etc/
(не уверен, почему unixODBC думал, что они там есть), я создал символическую ссылку на каждый файл:
sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini
Это решило проблему.
Ответ 2
В моем случае, я должен изменить строку драйвера базы данных pyodbc
на
driver='{ODBC Driver 17 for SQL Server}'
на самом деле, в моем коде python pyodbc ожидал драйвера ODBC 13
но, поскольку версия драйвера ODBC была обновлена (из-за обновления ubuntu) до текущей версии драйвера ODBC 17, возникла проблема.
Ответ 3
В моем случае у меня Mac OS, и следующие команды устранили проблему:
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools
Ответ 4
В моем случае я исправил проблему, выполнив три шага:
# Step1: install unixodbc
brew install unixodbc
# Step2: install Microsoft ODBC Driver for SQL Server on MacOS
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools
# Step3:verify odbcinst configuration path is correct
odbcinst -j
sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini
Ответ 5
Я должен добавить, что если вы используете другой драйвер (FreeTDS) и в строке подключения вы не упомянули об этом, по умолчанию будет указано driver='{ODBC Driver 17 for SQL Server}
или что-то в этом роде.
Таким образом, решение состоит в том, чтобы не забыть драйвер, ваши настройки БД будут выглядеть так: 'default': { 'ENGINE': 'sql_server.pyodbc', 'HOST': '127.0.0.1', 'NAME': 'mydb', 'PORT': '1433', 'USER': 'sa', 'PASSWORD': '*****', 'OPTIONS':{ 'driver': 'FreeTDS', 'host_is_server': True, } }