5

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))
4

2 に答える 2

3

これは、sqlite3モジュールがその分離レベルでどのように動作するかの結果であるように見えます。

これは機能します。2つの変更に注意してください。

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バージョン:2.6.2(release26-maint、2009年4月19日、01:56:41)
[GCC 4.3.3]
PySQLiteバージョン:2.4.1
sqlite3バージョン:3.6.10

0 | 200
5 | 205

これは不十分な答えであり、sqlite3モジュールのドキュメントに関連するものは何も見つかりませんでした(ソースを調べようともしませんでした)。しかし、それが正しい方向を見つけるのに役立つことを願っています。

于 2010-01-10T08:14:36.693 に答える
1

これは pysqlite のバグです。pysql issue trackerpython issue tracker を参照してください。

于 2013-01-25T12:18:08.667 に答える