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
相关产品推荐
相关产品推荐

