El uso de puntos de retorno en sqlite3 pitón
-
19-09-2019 - |
Pregunta
Estoy intentando utilizar puntos de retorno con el módulo del sqlite3 integrado en Python 2.6. Cada vez que intento para liberar o deshacer un punto de salvaguarda, siempre recibirá un OperationalError: no such savepoint
. ¿Qué me falta?
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
desde este código:
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))
Solución
Esto parece ser el resultado de cómo se comporta el módulo del sqlite3 con ese nivel de aislamiento.
Esto funciona, observe los dos cambios:
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))
Salida:
$ 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
Esta es una respuesta insatisfactoria, y no vi nada relevante en la documentación del módulo del sqlite3 (ni tampoco trato de echar un vistazo a la fuente). Pero espero que ayude a encontrar la dirección correcta.
Otros consejos
Esto es un error en pysqlite, ver el tema pysql de seguimiento y el tema pitón rastreador .