سؤال

أحاول استخدام نقاط الوقف باستخدام وحدة SQLite3 المدمجة في Python 2.6. في كل مرة أحاول فيها الإفراج أو التراجع عن ساحة، أستلم دائما 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' من مثال؛ " Python Version: 2.6.2 (Services26-Maintain، Apr 19 2009، 01:56:41) [GCC 4.3.3] Pysqlite الإصدار: 2.4.1 SQLite3 الإصدار: 3.6.10 0 | 200 5 | 20 |

هذه إجابة غير مرضية، ولم أر أي شيء مناسب في مستندات وحدة SQLite3 (ولا أحاول إلقاء نظرة على المصدر). ولكن آمل أن يساعدك في العثور على الاتجاه الصحيح.

نصائح أخرى

هذا خطأ في pysqlite، انظر the pysql القضية تعقب و القضية الثعبان تعقب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top