문제

Python 2.6에 내장 된 SQLite3 모듈과 함께 SavePoints를 사용하려고합니다. SavePoint를 릴리스하거나 롤백하려고 할 때마다 나는 항상 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.1
sqlite3 version: 3.6.10

0|200
5|205

이것은 불만족스러운 대답이며 SQLITE3 모듈 문서에서 관련된 것을 보지 못했습니다 (소스를 보려고 시도하지도 않았습니다). 그러나 나는 그것이 당신이 올바른 방향을 찾는 데 도움이되기를 바랍니다.

다른 팁

이것은 pysqlite의 버그입니다 PYSQL 문제 추적기 그리고 파이썬 문제 추적기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top