如何使用 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。
我到处都找遍了,也不知道哪里出了问题。
我希望能够对一些数据库查询进行排队,并且能够在任何查询失败时回滚它们。我无法让它工作,所以我尝试将问题简化为一个简单的示例(开始 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。