Verwenden von SavePoints in Python SQLite3
-
19-09-2019 - |
Frage
Ich versuche, SavePoints mit dem in Python 2.6 eingebauten SQLite3 -Modul zu verwenden. Jedes Mal, wenn ich versuche, einen Savepoint zu veröffentlichen oder zu rollen, erhalte ich immer eine OperationalError: no such savepoint
. Was vermisse ich?
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
Aus diesem Code:
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))
Lösung
Dies scheint ein Ergebnis zu sein, wie sich das SQLite3 -Modul mit dieser Isolationsstufe verhält.
Dies funktioniert, bemerken Sie die beiden Änderungen:
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))
Ausgabe:
$ 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.1 sqlite3 version: 3.6.10 0|200 5|205
Dies ist eine unbefriedigende Antwort, und ich habe in den SQLite3 -Moduldocs nichts Relevantes gesehen (ich habe auch nicht versucht, einen Blick auf die Quelle zu werfen). Aber ich hoffe es hilft Ihnen, die richtige Richtung zu finden.
Andere Tipps
Dies ist ein Fehler in Pysqlite, siehe Der PYSQL -Ausgabe -Tracker und Der Python -Ausgabe -Tracker.