sqlite3 - python sqlite 3 : roll back to save point fails -
def रोलबैक_सएवेपॉइंट (स्वयं): कोशिश करें: self.db.execute ("savepoint pt; के लिए रोलबैक;") को छोड़कर : मुद्रित "प्वाइंट को बचाने के लिए वापस रोल" असफल: प्रिंट "बिंदु को बचाने के लिए वापस रोल करें।" "कोड" क्या गलत हो गया? संपादित करें: मैंने नीचे दिये गये कोड को बदल दिया और त्रुटि संदेश प्राप्त किया
self.db.execute ("savepoint pt;") प्रिंट "सहेजें बिंदु बनाया "self.cursor.execute (" एसटीके मूल्यों में डालें "(33)") self.db.execute ("savepoint pt; के लिए रोलबैक;")
त्रुटि
ट्रेसबैक बनाए गए ट्रेसबैक (सबसे हाल ही में कॉल अंतिम) सहेजें: फ़ाइल "open_db.py", पंक्ति 77, & lt; मॉड्यूल & gt; Obj1.save_point () फ़ाइल "open_db.py", पंक्ति 63, save_point self.db.execute में ("savepoint pt; के लिए रोलबैक;") sqlite3.ऑपरेशन त्रुटि: कोई ऐसी सहेज बिंदु नहीं: pt
कभी अपवादों को पकड़ना न करें जो आप हैंडलिंग नहीं कर रहे हैं। इसे उठाने दें, ताकि आपके पास उपयोगी त्रुटि संदेश और ट्रैसबैक हो सकें।
उदाहरण:
& gt; & gt; & gt; सी। एक्सक्यूट ('रिवॉइंट पॉइंट पॉइंट;') ट्रेसबैक (सबसे हाल ही में कॉल अंतिम): फ़ाइल "& lt; stdin & gt;", लाइन 1, & lt; मॉड्यूल & gt; Sqlite3.ऑपरेशन त्रुटि: ऐसा कोई सहेजना नहीं है: पीटी
ट्रसबैक से मुझे पता चल सकता है कि कोई भी pt
savepoint नहीं है मुझे नहीं पता कि आपके साथ क्या गलत है क्योंकि आप बहुत जानकारी को छिपा रहे हैं जो आपकी सबसे अधिक मदद कर सकता है। सभी त्रुटियों को पकड़ना और कुछ "असफल" संदेश छापने का काम गूंगा है - ट्रेसेबैक बहुत उपयोगी है और इस समस्या को बेहतर बताते हैं।
संपादित करें: आपका कोड बिल्कुल नहीं था एक आसानी से चलने वाले टेस्टकेस, लेकिन इसे पढ़ने से मैं इस मुद्दे को पुन: उत्पन्न करने के लिए खुद को कुछ कोड लिखने में सक्षम था। मैं वास्तव में अभी तक नहीं समझा सकता है, लेकिन मुझे यह काम करने का एक तरीका मिला - संबंधित है।
यहां मेरा पूर्ण, चलने वाला उदाहरण है:
import एनएफ आयात ओएस च = एनएफ के रूप में tempfile आयात NamedTemporaryFile से sqlite3 (प्रत्यय = '। डाटाबेस', झूठी हटाना =) .name db = sqlite3.connect (च) की कोशिश: db.execute ( 'टेबल foo बनाएँ (आईडी पूर्णांक प्राथमिक कुंजी, डेटा VARCHAR) ') db.isolation_level = कोई नहीं db.execute (' foo में डालने (डेटा) मूल्यों (?) ', (' हैलो ',)) db.execute (' foo में डालने (डेटा) मूल्यों (?) ' , ( 'दुनिया',)) db.execute ( "savepoint pt;") db.execute ( 'foo में डालने (डेटा) मूल्यों (?)' ( 'बाह',),) db.execute ( 'foo में डालने (डेटा) मान (?) ', (' अलविदा दुनिया ',)) db.execute ("savepoint pt के लिए रोलबैक;") db.execute (' INFER INFO FOO (डेटा) मान (?) ', (' शांति ' ,)) का कहना है कि सूची (डीबी.एक्सएक्यूट ('फू' से चुनें ')) == [(1,' हैलो '), (2,' विश्व '), (3,' पे ऐस ')] अंततः: db.close () os.remove (f)
यह काम करता है जो रेखा है db.isolation_level = none
। यदि आप इसे बाहर टिप्पणी करते हैं, तो यह आपकी त्रुटि की तरह टूट जाता है मैंने सभी प्रलेखित मानों का उपयोग करने की कोशिश की है "DEFERRED", "IMMEDIATE" और "EXCLUSIVE", सभी त्रुटि में समाप्त हो गए हैं।
Comments
Post a Comment