15

我有一个用户名,我必须在许多(最多 25 个)表中进行更改。(是的,我知道。)原子事务似乎是处理这类事情的方法。但是,我不知道如何使用 pyodbc 执行此操作。我以前看过各种关于原子事务的教程,但从未使用过它们。

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

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

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

4

2 回答 2

24

根据其文档,pyodbc 确实支持事务,但前提是 odbc 驱动程序支持它。此外,由于 pyodbc 与PEP 249兼容,因此仅在完成手动提交时才存储数据。
这意味着您必须明确地commit()处理事务或rollback()整个事务。

请注意,pyodbc 还支持自动提交功能,在这种情况下,您不能进行任何事务。
默认情况下,自动提交是关闭的,但您的代码库可能已将其打开。您应该在执行连接时检查连接

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

或者,您也可以明确关闭自动提交模式

cnxn.autocommit = False

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

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

于 2009-06-30T14:57:31.403 回答
-9

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

于 2009-06-30T14:05:06.097 回答