在pythonsqlite3中使用保存点

2024-09-26 22:45:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python2.6中内置的sqlite3模块中使用savepoints。每次我试图释放或回滚保存点时,总是会收到一个OperationalError: no such savepoint。我错过了什么?在

python version: 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)]
PySQLite version: 2.4.1
sqlite3 version: 3.6.11

Traceback (most recent call last):
  File "spDemo.py", line 21, in <module>
    conn.execute("release savepoint spTest;")
sqlite3.OperationalError: no such savepoint: spTest

根据此代码:

^{pr2}$

Tags: 模块noappleversionsqlite3内置octinc
2条回答

这似乎是sqlite3模块在该隔离级别下行为的结果。在

这是可行的,请注意以下两个更改:

import sys
import sqlite3

print 'python version:', sys.version
print 'PySQLite version:', sqlite3.version
print 'sqlite3 version:', sqlite3.sqlite_version
print

conn = sqlite3.connect('shane.sqlite')
conn.isolation_level = None  # CHANGED

with conn:
    conn.execute("create table example (A, B);")

with conn:
    conn.execute("insert into example values (?, ?);", (0,200))

    conn.execute("savepoint spTest;")
    conn.execute("insert into example values (?, ?);", (1,201))
    conn.execute("insert into example values (?, ?);", (2,202))
    conn.execute("rollback to savepoint spTest;")  # CHANGED

    conn.execute("insert into example values (?, ?);", (5,205))

输出:

^{pr2}$

这不是一个令人满意的答案,而且我在sqlite3模块文档中没有看到任何相关内容(也没有尝试查看源代码)。但我希望它能帮你找到正确的方向。在

这是pysqlite中的一个bug,请参见the pysql issue tracker和{a2}。在

相关问题 更多 >

    热门问题