在Python中,如何使用pyodbc执行事务?
我有一个用户名需要在大约25个表里进行更改。(我知道,这听起来很麻烦。)为了处理这种情况,使用原子事务似乎是个不错的选择。不过,我不知道怎么用pyodbc来实现这一点。我之前看过一些关于原子事务的教程,但从来没有实际使用过。
我的环境是:Windows系统,Python 2.6,pyodbc,Microsoft SQL 2005。我用过pyodbc来执行单个SQL语句,但从来没有处理过复合语句或事务。
关于SQL的最佳实践似乎建议创建一个存储过程来处理这种情况。对于写存储过程,我有一些顾虑,按重要性排序如下: 1) 我从来没有写过存储过程。 2) 我听说pyodbc目前还不能从存储过程中返回结果。 3) 这绝对不是我的数据库。它是由供应商提供和更新的。
那么,处理这个问题的最佳方法是什么呢?
2 个回答
-9
我觉得pyodbc并没有特别支持事务的功能。你需要手动发送SQL命令来开始、提交或回滚事务。
29
根据它的文档,pyodbc确实支持事务,但前提是你的odbc驱动程序也得支持。此外,pyodbc遵循PEP 249,数据只有在你手动提交的时候才会被保存。
这意味着你必须明确地使用commit()
来提交事务,或者使用rollback()
来撤销整个事务。
需要注意的是,pyodbc还支持自动提交功能,在这种情况下,你就不能进行任何事务了。
默认情况下,自动提交是关闭的,但你的代码可能已经开启了这个功能。你应该在连接时检查一下。
cnxn = pyodbc.connect(cstring, autocommit=True)
另外,你也可以明确地关闭自动提交模式,方法是
cnxn.autocommit = False
但这可能会对你的系统产生很大的影响。
注意:你可以在它的wiki上获取更多关于pyodbc自动提交模式的信息。