考虑这个测试用例:
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()
方法的调用未恢复先前提交的更改。为什么?它不应该回滚吗?
提前谢谢。
答案 0 :(得分:3)
您不能同时提交和回滚同一个事务。 con1.commit()在该游标上结束您的事务。下一个con1.rollback()要么被静默忽略,要么正在回滚空事务。