باستخدام نقاط الوقف في Python SQLite3
-
19-09-2019 - |
سؤال
أحاول استخدام نقاط الوقف باستخدام وحدة 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 القضية تعقب و القضية الثعبان تعقب.
لا تنتمي إلى StackOverflow