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

时间:2009-06-30 13:45:12

标签: python transactions pyodbc

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

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

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

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

2 个答案:

答案 0 :(得分:11)

通过documentation,pyodbc确实支持事务,但只有当odbc驱动程序支持它时。此外,由于pyodbc符合PEP 249,因此只有在完成手动提交时才会存储数据 这意味着您必须明确commit()交易,或rollback()整个交易。

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

cnxn = pyodbc.connect(cstring, autocommit=True)

或者,您也可以使用

明确关闭自动提交模式
cnxn.autocommit = False

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

注意:您可以在wiki

上获得有关pyodbc自动提交模式的更多信息

答案 1 :(得分:-4)

我不认为pyodbc对交易有任何具体的支持。您需要将SQL命令发送到启动/提交/回滚事务。