2010-01-10 8 views
5

मैं python 2.6 में निर्मित sqlite3 मॉड्यूल के साथ savepoints का उपयोग करने का प्रयास कर रहा हूं। हर बार जब मैं एक सेवपॉइंट को रिलीज़ या रोलबैक करने का प्रयास करता हूं, तो मैं हमेशा OperationalError: no such savepoint प्राप्त करता हूं। मैं क्या खो रहा हूँ?पायथन sqlite3 में savepoints का उपयोग

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)) 
+1

संबंधित: http://stackoverflow.com/questions/1654857/ –

उत्तर

3

यह कैसे 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 मॉड्यूल डॉक्स में प्रासंगिक कुछ नहीं देखा (और न ही किया था मैं स्रोत पर एक नज़र डालने की कोशिश करता हूं)। लेकिन मुझे उम्मीद है कि यह आपको सही दिशा खोजने में मदद करेगा।

+0

मैंने कभी भी बाहरी लेनदेन स्तर के बिना इसे आजमाने की कोशिश नहीं की, क्योंकि SQL दस्तावेज़ों ने इंगित किया कि बचत बिंदुओं का उपयोग लेनदेन के साथ किया जा सकता है। यह मुझे संकेत देता है कि शायद मुझे एक साथ काम करने के लिए एक निश्चित प्रगति की ज़रूरत है! अधिक जांच के लिए मुझे एक अच्छी दिशा देने के लिए धन्यवाद .. –

संबंधित मुद्दे