2015-09-07 45 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