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

Pyodbc是否会将SQLWarnings视为错误?如何配置忽略该类警告?

解决方案

该需求可以实现,以下是三种可直接落地的方案:

方案1:会话级临时关闭ANSI_WARNINGS(无侵入存储过程)

不需要修改原有存储过程,仅在当前调用存储过程的数据库会话中执行关闭警告的语句,改动完全在Python侧,仅对当前连接生效:

cur = conn.cursor()
# 新增如下语句,关闭当前会话的空值聚合警告
cur.execute("SET ANSI_WARNINGS OFF")
cur.execute(str_sql)

方案2:异常分支过滤指定错误码

因为Pyodbc将该警告判定为错误抛出,你可以在捕获异常时判断错误码,仅忽略8153号错误,其余异常正常抛出:

except db.Error as ex:
    err_code = ex.args[0]
    # 匹配空值聚合警告的错误码
    if err_code == 8153:
        cur.commit()
        cur.close()
        return True
    log.error(str(ex.args[1]))
    raise ConnectionError(ex.args[1])

方案3:连接字符串配置全局忽略

如果不想修改执行逻辑,可以在创建数据库连接的字符串中添加AnsiNPW=No参数,该参数由ODBC Driver 17 for SQL Server原生支持,作用是默认关闭ANSI警告,示例连接字符串片段:

DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的数据库地址;DATABASE=你的库名;UID=账号;PWD=密码;AnsiNPW=No

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:36:00