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

Pyodbc rollback()正确用法咨询:事务回滚是否等效于关闭应用

关于pyodbc回滚功能的问题解答

代码是否正确使用rollback?

这段代码的核心逻辑是正确的,但存在一个小瑕疵:except: 会捕获所有类型的异常(包括和数据库操作无关的错误,比如代码语法错误),可能导致不必要的回滚操作。建议改成仅捕获数据库相关异常:

import pyodbc

try:
    cursor.execute('exec storedproc1')
    cursor.execute('exec storedproc2')
    cursor.execute('exec storedproc3')
    cursor.execute('exec storedproc4')
    
    connection.commit()
except pyodbc.Error:
    connection.rollback()

执行失败未commit时,代码效果是否和关闭应用相同?

是的,效果完全一致。pyodbc连接默认处于手动提交模式(autocommit=False),所有execute操作都会被纳入同一个事务,直到调用commit()才会把更改持久化到数据库:

  • 如果某个存储过程执行失败,代码进入except块调用rollback(),会主动撤销当前事务内的所有未提交更改;
  • 关闭应用时,Python会自动断开数据库连接,SQL Server检测到连接中断后,会自动回滚该连接上所有未提交的事务。
    两者最终结果都是:所有未提交的更改被完全回滚,数据库回到执行这些存储过程之前的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:16:11