【问题标题】:In Python, Using pyodbc, How Do You Perform Transactions?在 Python 中,使用 pyodbc,你如何执行事务?
【发布时间】:2010-11-07 00:27:15
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python transactions pyodbc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      cnxn.autocommit = False
      

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

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

      【讨论】:

      • 根据 PEP 249 默认情况下,自动提交是关闭的:“请注意,如果数据库支持自动提交功能,则最初必须关闭。”
      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2020-07-31
      • 2012-03-06
      相关资源
      最近更新 更多