[英]When does sqlite3 roll back transactions in python, and when doesn't it?
[英]Python sqlite3 module not rolling back transactions
考虑以下测试案例:
import sqlite3 con1 = sqlite3.connect('test.sqlite') con1.isolation_level = None con2 = sqlite3.connect('test.sqlite') con2.isolation_level = None cur1 = con1.cursor() cur2 = con2.cursor() cur1.execute('CREATE TABLE foo (bar INTEGER, baz STRING)') con1.isolation_level = 'IMMEDIATE' cur1.execute('INSERT INTO foo VALUES (1, "a")') cur1.execute('INSERT INTO foo VALUES (2, "b")') print cur2.execute('SELECT * FROM foo').fetchall() con1.commit() print cur2.execute('SELECT * FROM foo').fetchall() con1.rollback() print cur2.execute('SELECT * FROM foo').fetchall()
据我所知,我期望看到这样的结果:
[] [(1, u'a'), (2, u'b')] []
但是,这导致了:
[] [(1, u'a'), (2, u'b')] [(1, u'a'), (2, u'b')]
因此,在第一个连接中对rollback()
方法的调用未还原以前提交的更改。 为什么? 它不应该回滚它们吗?
先感谢您。
您不能同时提交和回滚同一事务。 con1.commit()在该游标上结束您的事务。 下一个con1.rollback()要么被静默忽略,要么回滚一个空事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.