Как да отмените транзакции с PyQT4

Търсих навсякъде и не мога да разбера какво се обърка.

Искам да мога да поставя на опашка няколко заявки към базата данни и да мога да ги върна обратно, ако някоя заявка се провали. Не можах да накарам това да работи, така че се опитах да намаля проблема до прост пример (започнах транзакция, изпълних две заявки, опитах да върна назад), но дори това не работи.

Този код трябва; започнете транзакция, опитайте се да създадете две таблици и след това бъдете върнати назад, така че да не се показват промени в базата данни.

Извикването на 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()

person Owen Tourlamain    schedule 07.09.2015    source източник


Отговори (1)


Ако проверите документацията на MySQL относно транзакциите, ще откриете, че всяка заявка, която създава или модифицира таблица, автоматично ангажира текущата транзакция - следователно не може да бъде върната назад. https://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html

Ще трябва сами да пуснете таблиците ръчно.

person PaulF    schedule 07.09.2015
comment
Добре, изглежда, че разбирането ми за транзакциите е погрешно, каква е целта на връщането назад? Изглежда, че единствените неща, които мога да върна, са select и show, което изглежда малко излишно - person Owen Tourlamain; 07.09.2015
comment