У меня проблемы с подключением к базе данных 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. Не работает, все равно выдает ту же ошибку интерфейса с китайскими иероглифами.
Есть идеи?