是否可以在工作交易中执行db.rollback()之前检查数据库更新?

时间:2016-05-28 21:44:33

标签: python mysql transactions

我正在使用队列来为python中的MySQL数据库排队事务。我正在使用autocommit = False,这样如果没有正确执行所有数据查询,我就可以回滚事务。

我想知道在执行db.rollback()之前是否可以检查工作人员是否对数据库执行了操作?或者,即使工作者没有对数据库做任何事情而没有发生任何错误,您是否可以执行db.rollback?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果我已正确理解了这个问题,那么在没有其他任何事情发生的情况下回滚事务是错误,尽管 是一个错误尝试回滚没有交易时。要知道是哪种情况,您可以测试MySQLConnection.in_transaction property

答案 1 :(得分:0)

如果您发出

START TRANSACTION;

(使连接与autocommit = false相同),发送命令

ROLLBACK WORK;

(另见https://dev.mysql.com/doc/refman/5.5/en/commit.html) 返回

0 row(s) affected

因此,这意味着,您可以安全地回滚空事务(在MySQL 5.1.49-3上测试)。

或者,您始终可以在工作程序中存储本地/静态变量,该变量使用false进行初始化。如果工作者至少发出了一个更新命令,则将此变量设置为true

如果您以后必须决定是否ROLLBACK,您只需查看变量:如果它true,您知道您已通过数据库通道发送了至少一个更新命令