подключение pyodbc к MS SQL Server, работающему в док-контейнере - PullRequest
0 голосов
/ 24 октября 2018

pyodbc не может подключиться при попытке подключения через указание драйвера.Я могу подключиться к настройке DSN, но я также хочу установить соединение, когда у пользователя есть сведения о драйвере, сервере, UID, PWD и базе данных.

Я на Mac и использую драйвер FreeTDS.

freetds.conf

[MYMSSQL]
host = 0.0.0.0
port = 1433
tds version = 7.3

odbcinst.ini

[FreeTDS]
Description=FreeTDS Driver for Linux & MSSQL
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
UsageCount=10

Вот как я пытаюсь подключиться:

conn_str = "DRIVER=FreeTDS;SERVER={0};UID={1};PWD={2};DATABASE={3}".format('MYMSSQL', 'sa', 'password','tempdb')
conn = pyodbc.connect(conn_str)

ОшибкаЯ получаю это:

pyodbc.OperationalError: ('08001', '[08001] [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

Точно такие же детали базы данных работают, когда я пытаюсь подключиться через DSN.

1 Ответ

0 голосов
/ 24 октября 2018

Если у вас есть файл freetds.conf, содержащий имя хоста / IP и порт, например,

gord@xubuntu64-nbk1:~$ cat /etc/freetds/freetds.conf 
[myFreeTdsHost]
    host = 192.168.0.179
    port = 49242

, то вы можете использовать оба этих значения в строке подключения без DSN, просто указавSERVERNAME=

# get host name/IP and port from freetds.conf
cnxn_str = (
    'DRIVER=FreeTDS_ODBC;'
    'SERVERNAME=myFreeTdsHost;'
    'DATABASE=myDb;'
    'UID=sa;PWD=_whatever_;'
)

Вы также можете указать имя хоста / IP-адрес и порт напрямую через SERVER= и PORT=, например

# supply host name/IP and port directly (bypassing freetds.conf)
cnxn_str = (
    'DRIVER=FreeTDS_ODBC;'
    'SERVER=192.168.0.179;'
    'PORT=49242;'
    'DATABASE=myDb;'
    'UID=sa;PWD=_whatever_;'
)

Подробнее см. В документации FreeTDS. здесь .

...