我正在使用队列来为python中的MySQL数据库排队事务。我正在使用autocommit = False,这样如果没有正确执行所有数据查询,我就可以回滚事务。
我想知道在执行db.rollback()之前是否可以检查工作人员是否对数据库执行了操作?或者,即使工作者没有对数据库做任何事情而没有发生任何错误,您是否可以执行db.rollback?
谢谢!
答案 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
,您知道您已通过数据库通道发送了至少一个更新命令