unixODBC: имя источника данных не найдено, и драйвер по умолчанию не указан, pyodbc в Ubuntu подключается к SQL Server

#python #sql-server #pyodbc

#python #sql-сервер #pyodbc

Вопрос:

У меня есть скрипт Python, который хорошо работает с моего локального компьютера с Windows, используя драйвер {SQL Server Native Client 11.0}. Я пытаюсь запустить на сервере Linux, но это оказывается сложным. Я следовал руководству здесь https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Linux

Но я получаю сообщение об ошибке при попытке подключения:

pyodbc.Ошибка интерфейса: (‘IM002′, u'[IM002] [unixODBC] [Диспетчер драйверов] Имя источника данных не найдено, и драйвер по умолчанию не указан (0) (SQLDriverConnect)’)

Это моя строка подключения или, по крайней мере, последняя, которую я пробовал.

 pyodbc.connect('DNS=MSSQLServerDatabase;Database=DBName;UID=user;PWD=password')
 

Я подтвердил, что DNS зарегистрирован в odbcinst -q -s

 [dbserverdsn]
[Default]
[MSSQLServerDatabase]
 

И проверил расположение файлов odbc.ini odbcinst -j

 unixODBC 2.3.7
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/bwarrick/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
 

И я думаю, что они выглядят правильно… Имя драйвера указано правильно: cat /etc/odbc.ini

 [dbserverdsn]
Driver=FreeTDS
Server=server.database.windows.net
Port=1433
Database=dbname
Driver=/usr/local/lib/libtdsodbc.so
UsageCount=1

[Default]
Driver=/usr/local/lib/libtdsodbc.so

[MSSQLServerDatabase]
Driver=ODBC Driver 17 for SQL Server
Description=Connect to my SQL Server instance
Trace=No
Server=server.database.windows.net
 

И есть запись для драйвера: cat /etc/odbcinst.ini

 [ODBC]
Trace=No
TraceFile /tmp/odbc.log=

[FreeTDS]
Description=FreeTDS Driver
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.7.so.2.1
UsageCount=1
 

У меня заканчиваются идеи относительно того, почему я получаю эту ошибку.

Комментарии:

1. Атрибут строки подключения называется DSN= , а не DNS=

2. Дох!… Спасибо.