Не удается открыть 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, } }