2015-09-07 66 views
0

我到处寻找,我无法弄清楚什么是错误的。如何使用PyQT4回滚事务

我希望能够排队几个数据库查询,并能够回滚,如果任何查询失败。我无法得到这个工作,所以我试图将问题简化为一个简单的例子(开始事务,运行两个查询,试着回滚),但即使这样做不起作用。

此代码应该;启动事务,尝试创建两个表,然后回滚,以便数据库中不出现更改。

调用回滚()方法返回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() 

回答

1

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

你就必须自己手动删除表。

+0

好的,看来我对交易的理解有瑕疵,那么回滚的目的是什么呢?这听起来像我可以回滚的唯一的东西是'select'和'show'这似乎有点多余 –

+0

看看这些网站:http://stackoverflow.com/questions/2159045/when-should-i-use -transactions-in-my-queries - http://www.sitepoint.com/mysql-transactions-php-emulation/ - http://www.tutorialspoint.com/mysql/mysql-transactions.htm – PaulF