在Python中,使用pyodbc,如何执行事务?

6 python transactions pyodbc

我有一个用户名,我必须在很多(最多约25个)表中进行更改.(是的,我知道.)原子事务似乎是这种事情的方法.但是,我不知道如何用pyodbc做到这一点.我以前见过关于原子事务的各种教程,但从未使用它们.

设置:Windows平台,Python 2.6,pyodbc,Microsoft SQL 2005.我已经将pyodbc用于单个SQL语句,但没有使用复合语句或事务.

SQL的最佳实践似乎表明创建存储过程非常适合这种情况.我对执行存储过程的担心如下,按重要性递增:1)我从未编写过存储过程.2)我听说pyodbc还没有返回存储过程的结果.3)这绝对不是我的数据库.它是供应商提供的,供应商更新的,等等.

那么,最好的方法是什么?

rob*_*rob 13

通过它的文档,pyodbc支持事务,但只有odbc驱动程序支持它.此外,由于pyodbc符合PEP 249,因此仅在手动提交时才存储数据.
这意味着您必须明确地commit()进行交易或rollback()整个交易.

请注意,pyodbc还支持自动提交功能,在这种情况下,您不能拥有任何事务.
默认情况下,自动提交已关闭,但您的代码库可能已将其设置为已启用.您应该在执行连接时检查连接

cnxn = pyodbc.connect(cstring, autocommit=True)
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用显式关闭自动提交模式

cnxn.autocommit = False
Run Code Online (Sandbox Code Playgroud)

但这可能会对您的系统产生很大影响.

注意:您可以在其wiki上获得有关pyodbc自动提交模式的更多信息

  • 上面的Wiki链接仍然存在,但是已经过时了(当前由Google代码存档)。pyodbc github交易文档中的此页面提供了附加信息:https://github.com/mkleehammer/pyodbc/wiki/Database-Transaction-Management (2认同)

Len*_*bro -9

我不认为 pyodbc 对事务有任何特定的支持。您需要发送 SQL 命令来启动/提交/回滚事务。