एसक्यूएलकेमी में घोंसले के लेनदेन के दो तरीके हैं। एक वर्चुअल लेनदेन है, जहां स्क्लाक्लेमी ट्रैक करता है कि आपने कितनी शुरुआत जारी की है और केवल तभी प्रतिबद्धता है जब बाहरी लेनदेन करता है। हालांकि रोलबैक तुरंत जारी किया जाता है। चूंकि लेन-देन आभासी है - यानी डेटाबेस घोंसले के कुछ भी नहीं जानता है, आप रोलबैक के बाद उस सत्र के साथ कुछ भी नहीं कर सकते हैं जब तक आप सभी बाहरी लेन-देन को रोलबैक नहीं करते। उपयोग वर्चुअल लेनदेन को subtransactions=True
begin()
कॉल पर तर्क जोड़ने की अनुमति देने के लिए। यह सुविधा उन कार्यों के अंदर लेनदेन नियंत्रण का उपयोग करने की अनुमति देने के लिए मौजूद है जो एक दूसरे को कॉल किए बिना ट्रैक रखे बिना ट्रैक कर सकते हैं या नहीं। इसे समझने के लिए, autocommit=True
के साथ सत्र कॉन्फ़िगर करें और हमेशा एक लेनदेन समारोह में session.begin(subtransactions=True)
जारी करें।
घोंसला लेनदेन का दूसरा तरीका वास्तविक नेस्टेड लेनदेन का उपयोग करना है। वे savepoints का उपयोग कर लागू कर रहे हैं। यदि आप नेस्टेड लेनदेन को रोलबैक करते हैं, तो उस लेनदेन के भीतर किए गए सभी परिवर्तन वापस लुढ़कते हैं, लेकिन बाहरी लेनदेन उपयोग योग्य रहता है और बाहरी लेनदेन द्वारा किए गए किसी भी बदलाव अभी भी वहां हैं। नेस्टेड लेनदेन समस्या session.begin(nested=True)
या केवल session.begin_nested()
का उपयोग करने के लिए। नेस्टेड लेनदेन सभी डेटाबेस के लिए समर्थित नहीं हैं। SQLAlchemy का टेस्ट स्वीट पुस्तकालय विन्यास समारोह sqlalchemy.test.requires.savepoints
समर्थन के बारे में इस का कहना है:
emits_warning_on('mssql', 'Savepoint support in mssql is experimental and may lead to data loss.'),
no_support('access', 'not supported by database'),
no_support('sqlite', 'not supported by database'),
no_support('sybase', 'FIXME: guessing, needs confirmation'),
exclude('mysql', '<', (5, 0, 3), 'not supported by database')
PostgreSQL SQLAlchemy नेस्टेड लेनदेन पर ठीक काम करते हैं।
स्रोत
2010-02-25 21:44:35
नेस्टेड लेनदेन (जैसे ओरेकल के ऑटोोनोमस_TRANSACTION) दो मामलों से अलग एक विरोधी पैटर्न के रूप में योग्य हैं: ऑडिटिंग (इसलिए कथन का विवरण वापस लेने के बावजूद भी ऑर्डर किया जाता है) और त्रुटि लॉगिंग (कैप्चर करने के लिए कहां/कब विफल होते हैं)। अन्य सभी मामलों में सेवपॉइंट्स का उपयोग करना चाहिए। हेक, लेन-देन के दायरे को किसी भी कार्य या प्रक्रियाओं में संभाला नहीं जा रहा है; यह प्रतिबद्ध या रोलबैक करने के लिए अंतिम कॉलर की ज़िम्मेदारी होनी चाहिए। –
यह धारणा है। – user