如何使用 PyQT4 回滚事务

How to rollback transactions with PyQT4

我到处都找遍了,也不知道哪里出了问题。

我希望能够对一些数据库查询进行排队,并且能够在任何查询失败时回滚它们。我无法让它工作,所以我尝试将问题简化为一个简单的示例(开始 t运行saction,运行 两个查询,尝试回滚)但即使这样也行不通。

这段代码应该;启动 t运行saction,尝试创建两个表,然后回滚,因此数据库中不会出现任何更改。

对 rollback() 的调用正在返回 true,所以它说它正在工作,但是当我查看数据库时,无论如何都会创建表。

这是我的代码:

db = QSqlDatabase.database()
db.transaction()
q = QSqlQuery(db)
q.exec_("create table a ...") #omitted but I have checked they are fully valid queries
q.exec_("create table b ...")
db.rollback()

如果您查看有关事务的 MySQL 文档,您会发现任何创建或修改 table 的查询都会自动提交当前事务 - 因此无法回滚。 https://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html

您必须自己手动删除 table。