Python sqlite3模块没有回滚事务

时间:2011-02-19 13:59:11

标签: python sqlite rollback

考虑这个测试用例:

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()方法的调用未恢复先前提交的更改。为什么?它不应该回滚吗?

提前谢谢。

1 个答案:

答案 0 :(得分:3)

您不能同时提交和回滚同一个事务。 con1.commit()在该游标上结束您的事务。下一个con1.rollback()要么被静默忽略,要么正在回滚空事务。