繁体   English   中英

Python sqlite3模块不回滚事务

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM