上下文
所以我试图弄清楚在Python中使用SQLite时如何正确覆盖自动事务。当我尝试运行时
cursor.execute("BEGIN;")
.....an assortment of insert statements...
cursor.execute("END;")
我收到以下错误:
OperationalError: cannot commit - no transaction is active
我理解的是因为Python中的SQLite会自动在每个修改语句上打开一个事务,在这种情况下是一个INSERT。
问题:
我试图通过每几千条记录执行一次交易来加快插入速度。 如何克服自动开启交易?
答案 0 :(得分:8)
作为@CL。说你必须将隔离级别设置为None
。代码示例:
s = sqlite3.connect("./data.db")
s.isolation_level = None
try:
c = s.cursor()
c.execute("begin")
...
c.execute("commit")
except:
c.execute("rollback")
答案 1 :(得分:3)
您可以通过 isolation_level 参数到connect()调用或通过 isolation_level <控制sqlite3隐式执行哪种
BEGIN
语句(或根本不执行) / em>连接属性。如果您想要自动提交模式,请将 isolation_level 设置为
None
。