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

