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

Linux下pandas.read_sql查询MS SQL时查询串超274字符卡住问题求助

解决思路
  • 升级/替换ODBC驱动版本
    ODBC Driver 17 for SQL Server的部分小版本存在Linux环境下长查询字符串处理的已知bug,你可以尝试升级到ODBC Driver 18 for SQL Server,或回退到17.3及以下的稳定版本,Ubuntu环境下可直接通过微软官方源安装对应版本。
  • 升级unixODBC组件
    Ubuntu默认源携带的unixODBC版本通常较低,存在和高版本SQL Server ODBC驱动兼容的问题,执行以下命令升级到最新版:
    sudo apt update && sudo apt install unixodbc unixodbc-dev -y
    升级后可以通过odbcinst -j验证配置路径是否正确。
  • 修改ODBC驱动全局配置
    编辑/etc/odbcinst.ini文件,找到[ODBC Driver 17 for SQL Server]配置块,追加以下参数:
TDS_Version = 7.4
BufferSize = 65535
AnsiNPW = Yes

配置完成后需要重启Python进程生效。

  • 调整pandas调用方式
    不要直接将连接字符串传给pandas.read_sql(),优先通过pyodbc创建显式连接对象,同时开启自动提交参数,示例代码如下:
import pandas as pd
import pyodbc

# 连接时开启autocommit
conn = pyodbc.connect('<你的连接串>', autocommit=True)
# 先清理查询字符串首尾的空白字符
query = 'SELECT TOP 10 * FROM 你的schema.你的表.你的字段'.strip()
df = pd.read_sql(query, conn)
conn.close()

如果仍有问题,可以改用SQLAlchemy封装连接:

import pandas as pd
from sqlalchemy import create_engine
import urllib

quoted_con_str = urllib.parse.quote_plus('<你的连接串>')
engine = create_engine(f'mssql+pyodbc:///?odbc_connect={quoted_con_str}')
query = 'SELECT TOP 10 * FROM 你的schema.你的表.你的字段'.strip()
df = pd.read_sql(query, engine)
engine.dispose()
  • 清理查询字符串格式
    如果你的查询字符串包含大量换行、冗余空格,先做格式化处理,移除不必要的空白字符,避免触发驱动的缓冲区溢出类bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:15:03