使用 freeTDS 连接到 SQL 使用 TSQL 但不完全在 python 中的服务器数据库

Using freeTDS to connect to SQL Server database working with TSQL but not completely in python

我已成功建立从股票 raspberry pi 4 到 windows 10 上的本地数据库 运行 的连接。

如果我在终端中输入:

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

我得到了查询的结果,一切都适合该测试。可能值得一提的是,我在第一个 tsql 行后收到回复:

默认编码是 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 data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.

有什么想法吗?我试过设置编码/解码但没有帮助。如果我 select 一个特定的领域到目前为止是有效的。尝试更改所有代码并不兴奋,因为我有很多列并且有时在一大堆代码中按列号引用。

我假设您 运行 是相对较新的 FreeTDS 版本(0.95 或更高版本;您可以通过 tsql -C 找到您的版本)。如果您使用的是早期版本并且这不起作用,请尝试将 TDS_Version 更改为 7.27.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")