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

Python脚本执行Insert查询成功但SQL Server未保存数据的原因排查

问题描述

我编写了一个包含两个函数的Python脚本:一个用于向SQL Server表中插入数据,另一个用于读取表数据。调用插入函数时,数据并未保存到数据库中,但直接在SQL Server执行相同的Insert查询却能正常生效。防火墙配置无误,且表的主键为IDENTITY列,执行插入函数时该列仍会自动递增,但无数据留存。附上脚本截图、SQL Server信息截图及建表语句截图,恳请协助排查问题。

排查方案
  • 检查事务提交逻辑:Python连接SQL Server时默认会开启事务,若执行插入后未手动提交,数据会自动回滚。无论使用pyodbc还是pymssql,都要确认插入操作后调用了conn.commit()。示例:
    def insert_data(conn, data):
        cursor = conn.cursor()
        cursor.execute("INSERT INTO your_table(col1, col2) VALUES(?, ?)", data)
        conn.commit()  # 必须执行提交操作
        cursor.close()
    
  • 核对连接字符串的自动提交配置:部分驱动支持在连接字符串中设置autocommit=True,比如pyodbc的连接字符串可追加;autocommit=True,实现语句执行后自动提交,无需手动调用commit。
  • 检查异常捕获是否吞掉错误:若脚本中的try-except块忽略了异常,可能导致事务因错误回滚却未被察觉。确认捕获异常后是否打印或处理了错误信息,避免因静默失败导致数据丢失。
  • 验证连接的数据库实例与库名:排查脚本连接的数据库是否和手动执行SQL时使用的实例、库名一致,避免因连接到测试库/其他实例导致数据看不到。
  • 分析IDENTITY列递增的本质:IDENTITY值递增仅说明Insert语句被执行过(即使事务回滚,IDENTITY值也不会回滚),这一现象恰好佐证了语句已执行但未提交的可能性。
  • 查看SQL Server事务日志:通过DBCC LOG工具或SQL Server的事务日志查看功能,确认是否存在对应的插入操作及回滚记录,进一步验证事务未提交的猜测。

内容的提问来源于stack exchange,提问作者Jean-baptiste Briois

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:36:51