【发布时间】:2021-08-26 17:14:32
【问题描述】:
我正在尝试运行保存在以 UTF-8 编码的 SQL 文件中的查询。我的代码如下:
import pyodbc
import pandas as pd
query = open('test.sql', 'r')
print(query.read())
server = 'server'
database = 'database'
username = 'username'
password = 'password'
cnxn = pyodbc.connect(
'DRIVER={ODBC Driver 17 for SQL Server};' +
'SERVER=' + server + ';DATABASE=' + database +
';UID=' + username + ';PWD='+ password
)
df = pd.read_sql_query(query.read(), cnxn)
query.close()
print(df.head())
print(query.read()) 工作正常并正确显示test.sql 的内容,但read_sql_query 给出以下错误:
pyodbc.Error: ('HY090', '[HY090] [Microsoft][ODBC Driver Manager] 无效的字符串或缓冲区长度 (0) (SQLExecDirectW)')
如果我在运行之前在 Notepad++ 中将 SQL 文件的编码从 UTF-8 更改为 ANSI,则代码可以正常工作,没有错误。如何在不事先更改 SQL 文件编码的情况下完成这项工作?我想也许我应该使用.encode() 或.decode(),但我不知道如何使用。
【问题讨论】:
-
谢谢。我尝试将 query.read() 更改为 query.read().decode('utf-8-sig') 并得到“AttributeError:'str' object has no attribute 'decode'”。在这种情况下我将如何使用 .decode()?
-
您可以先尝试编码字符串,然后重新解码
query.read().encode("utf-8").decode() -
是否有无法转换为ANSI的字符?你确定是 UTF-8 而不是 UTF-16?
-
对不起,我说的是解码,然后重新编码,而我的意思是相反的。最终,查询中的某个地方似乎存在错误编码(可能是换行符?),所以这就是您想要摆脱的。
标签: python sql-server pandas encoding pyodbc