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

多行SQL在SQLAlchemy执行报错:结果对象无返回行

问题解决方法

原因分析

你遇到的问题是因为用multi=True执行多语句SQL时,ODBC驱动会依次返回每个语句的结果对象——前面的DECLARE、INSERT、UPDATE都是无返回行的操作,直接调用fetchall()会先处理第一个无返回的结果,触发报错。

解决方法一:遍历结果对象,提取有效结果

手动遍历所有返回的结果对象,跳过无行返回的操作,只保留最后SELECT语句的结果:

results = self.connection.execute(qry, multi=True)
final_data = None
for res in results:
    try:
        # 仅SELECT语句能成功获取行数据
        final_data = res.fetchall()
    except Exception:
        # 跳过无返回的操作(如DECLARE/INSERT/UPDATE)
        continue
df = pd.DataFrame(final_data)

解决方法二:在SQL开头添加SET NOCOUNT ON

在你的SQL语句最前面加上SET NOCOUNT ON;,它会抑制INSERT、UPDATE等操作返回的“影响行数”消息,让驱动只返回最终SELECT的结果集,此时甚至不需要multi=True:

# 给原SQL加上SET NOCOUNT ON前缀
qry = "SET NOCOUNT ON;" + qry
# 无需multi=True,直接执行并获取结果
result = self.connection.execute(qry).fetchall()
df = pd.DataFrame(result)

内容的提问来源于stack exchange,提问作者Lukas Fürst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:25:57