You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas read_sql_query读取UTF-8编码SQL文件报错如何解决?

问题根因

  • 直接诱因:你对同一个文件句柄连续调用了两次read()方法,第一次print(query.read())执行完成后,文件指针已经移动到文件末尾,第二次执行pd.read_sql_query(query.read(), cnxn)时读到的是空字符串,对应报错提示里的Invalid string or buffer length (0)。
  • 编码问题:Windows系统下open()方法默认使用GBK(也就是你说的ANSI)编码打开文件,你的SQL文件是UTF-8编码,文件内含非ASCII字符时读取就会出现异常,和你修改编码后可正常运行的表现一致。

解决代码

打开文件时直接指定UTF-8编码,同时把SQL内容存入变量避免二次读取即可,不需要额外调用编解码方法:

import pyodbc
import pandas as pd

# 用with上下文管理器自动管理文件句柄,指定UTF-8编码读取,内容存变量复用
with open('test.sql', 'r', encoding='utf-8') as f:
    query_sql = f.read()

print(query_sql)

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_sql, cnxn)

print(df.head())
  • 补充说明:如果你的UTF-8 SQL文件是带BOM头的(部分Windows编辑器保存UTF-8文件时默认会加BOM头),把encoding参数值换成utf-8-sig即可自动忽略BOM头,避免解析异常。

内容的提问来源于stack exchange,提问作者34293045

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:51:02