gpt4 book ai didi

python - 在 python sqlite3 中使用保存点

转载 作者:IT王子 更新时间:2023-10-29 06:29:08 26 4
gpt4 key购买 nike

我正在尝试将保存点与 python 2.6 中内置的 sqlite3 模块一起使用。每次我尝试释放或回滚一个保存点时,我总是收到一个 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

来自这段代码:

import sys
import sqlite3

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

conn = sqlite3.connect('db_spDemo.db')
conn.isolation_level = "DEFERRED"

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("release savepoint spTest;")

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

最佳答案

这似乎是 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))

输出:

$ python shane-sqlite3.py && sqlite3 shane.sqlite 'select * from example;'python version: 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) [GCC 4.3.3]PySQLite version: 2.4.1sqlite3 version: 3.6.100|2005|205

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

关于python - 在 python sqlite3 中使用保存点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com