工作与在MySQL-蟒我用来调用游标 “BEGIN;”, “COMMIT;” 和 “ROLLBACK;”明确地,如下所示:

try:
    cursor.execute("BEGIN;")
    # some statements
    cursor.execute("COMMIT;")
except:
    cursor.execute("ROLLBACK;")

然后,我发现,底层连接对象具有相应的方法:

try:
    cursor.connection.begin()
    # some statements
    cursor.connection.commit()
except:
    cursor.connection.rollback()

检查的 DB-API PEP 我发现它不提供连接对象的开头()方法,即使是扩展。

的MySQL蟒,顺便说一下,投DeprecationWarning,当您使用的方法。 sqlite3.connection,例如,不具有在所有的方法。

和的问题是为什么没有在PEP没有这样的方法?是语句不知何故可选的,它足以调用提交()呢?

有帮助吗?

解决方案 2

决定回答自己:

一个螺纹约DB API 2.0交易的在python列表,并从书中明显 SQL完全参考以下摘录让我觉得DB API工具SQL1标准的行为:

  

SQL标准的第一个版本   (SQL1)定义的隐式事务   模式,基于交易   支持DB2的早期版本。   在隐式模式下,只有COMMIT和   ROLLBACK语句的支持。一种   SQL事务会自动开始   与执行的第一个SQL语句   由用户或程序和结束时   COMMIT或执行回滚。该   一个事务的隐式结束   开始一个新的。

显式交易模式(SQL2和SQL:1999)。似乎是得心应手当RDBSM支持自动提交模式和当前的连接是在该模式下,但DB API只是不反映它

其他提示

这以前问问题。通常,“协议”与交易使用的是:

cursor = conn.cursor()
try:
    cursor.execute(...)
except DatabaseError:
    conn.rollback()
    raise
else:
    conn.commit()
finally:
    cursor.close()

这蟒开始2.6 源码Connection对象可以被用作上下文管理器可以自动提交或回滚事务的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top