Не удается подключиться к базе данных SQL Server из Pyodbc - PullRequest
0 голосов
/ 18 апреля 2019

У меня проблемы с подключением к базе данных SQL Server в Linux с использованием pyodbc. У меня есть запись в файле ODCINI. Я начал с этого:

import pyodbc

conn = pyodbc.connect('DSN=DSN;Database=DB;UID=UID;PWD=PWD')

cursor = conn.cursor()
cursor.execute('SELECT count(*) FROM dbo.tableA')
for row in cursor.fetchall():
    print(row)

который выдает эту ошибку:

RuntimeError: Unable to set SQL_ATTR_CONNECTION_POOLING attribute.

Я погуглил эту ошибку и добавил эту строку после прочтения некоторых рекомендаций:

pyodbc.pooling=False

Таким образом, скрипт изменился на:

import pyodbc

pyodbc.pooling=False

conn = pyodbc.connect('DSN=DSN;Database=DB;UID=UID;PWD=PWD')

cursor = conn.cursor()
cursor.execute('SELECT count(*) FROM dbo.tableA')
for row in cursor.fetchall():
    print(row)

Что привело к этому:

pyodbc.InterfaceError: ('IM003', '[IM003] 䑛瑡䑡物捥嵴佛䉄⁃楬嵢匠数楣楦摥搠楲敶\u2072潣汵\u2064潮⁴敢氠慯敤d\uffff\uffff㢸ꔻ罱\x00\ue5b8鮫罱\x00㳰ꔻ罱\x00\uffff\uffff罱\x00\x00\x00\x00\x00鳭ꕞ罱\x00塰ꕉ罱 (0) (SQLDriverConnect)')

По предложению коллеги я добавил эти 2 строки ПОСЛЕ строки pyodbc.connect:

conn.setdecoding(pyodbc.SQL_CHAR, encoding='latin1', to=str)
conn.setencoding(str, encoding='latin1')

Я пробовал это и с latin1, и с utf-8. Не работает, все равно выдает ту же ошибку интерфейса с китайскими иероглифами.

Есть идеи?

...