Использование freeTDS для соединения с SQL Серверной базой данных, работающей с T SQL, но не полностью в python - PullRequest
0 голосов
/ 05 февраля 2020

Я успешно установил соединение из стандартной RasPberry Pi 4 с нашей локальной базой данных, работающей на windows 10.

В терминале, если я наберу:

tsql -S *servername* -U *username* -P *password*
select * from testlist_table
go

I получить результат для запроса, и все хорошо для этого теста. Вероятно, стоит упомянуть, что я получаю обратно после первой строки t sql:

кодировка по умолчанию - en_us.utf-8 или что-то странное, подобное этому, а затем: использование кодировки по умолчанию utf-8,

При использовании python кода, если я набираю

import pyodbc
cnxn = pyodbc.connect("Driver={freeTDS};Server=*servername*;DATABASE=*databasename*;UID=*userid*;pwd=*pwd*")

cursor = cnxn.cursor()
cursor.execute("Select * from TestList_Table")

Я получаю следующую ошибку:

Данные Unicode в сопоставлении только для Unicode или данные ntext не могут быть отправлены клиентам с использованием DB-Library (например, I SQL) или ODB C версии 3.7 или более ранней.

Есть идеи? Я пытался установить кодирование / декодирование, но это не помогло. Если я выберу определенное поле, пока это работает. Не рад попробовать и изменить весь код, так как у меня много столбцов, и я иногда ссылаюсь по номеру столбца в большом беспорядке кода.

1 Ответ

1 голос
/ 05 февраля 2020

Я предполагаю, что вы используете относительно свежую версию FreeTDS (версия 0.95 или выше; вы можете найти свою версию с tsql -C). Если вы используете более раннюю версию, но это не работает, попробуйте изменить TDS_Version на 7.2 или 7.1.

Попробуйте:

import pyodbc
cnxn = pyodbc.connect(
    "Driver={freeTDS};Server=*servername*;DATABASE=*databasename*;"
    "UID=*userid*;pwd=*pwd*;TDS_Version=7.3;CHARSET=UTF-8;"
)

cursor = cnxn.cursor()
cursor.execute("Select * from TestList_Table")
...