使用freeTDS连接到使用TSQL的SQL Server数据库,但不能完全在python中使用

问题描述 投票:0回答:1

我已经成功建立了从库存树莓派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排序规则或ntext数据的Unicode数据无法使用DB-Library(例如ISQL)或ODBC 3.7或更早版本发送给客户端。

有什么想法吗?我尝试设置编码/解码,但这没有帮助。如果到目前为止我选择了一个特定的字段,那是可行的。尝试更改所有代码并不感到兴奋,因为我有很多列,并且有时在一大堆代码中按列号进行引用。

python sql-server linux database freetds
1个回答
0
投票

我将假设您正在运行相对较新的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")
© www.soinside.com 2019 - 2024. All rights reserved.