使用 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.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")
我已成功建立从股票 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.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")