django - Is "transaction.atomic" same as "transaction.commit_on_success"? -


डीजेंगो 1.6 प्रस्तावित करता है @ transaction.atomic लेनदेन प्रबंधन में rehaul के हिस्से के रूप 1.5 से।

मेरे पास एक फ़ंक्शन है जिसे एक जेन्गो मैनेजमेंट कमांड द्वारा बुलाया जाता है जिसे बदले में क्रॉन कहा जाता है, यानी इस मामले में कोई HTTP अनुरोध लेनदेन को ट्रिगर नहीं करता है। स्निपेट: django.db आयात लेनदेन से transaction.commit_on_success def my_function (): # कोड यहाँ

ऊपर कोड ब्लॉक में एक लेनदेन का उपयोग करता है my_function में किए गए सभी कार्यों के लिए

@ transaction.commit_on_success को @ transaction.atomic के साथ बदलता है समान व्यवहार? @ transaction.atomic :

परमाणुता डेटाबेस लेनदेन की परिभाषित संपत्ति है परमाणु हमें कोड के एक ब्लॉक बनाने की अनुमति देता है जिसमें डेटाबेस पर परमाणु की गारंटी है। यदि कोड का ब्लॉक सफलतापूर्वक पूरा हो गया है, तो परिवर्तन डेटाबेस के लिए प्रतिबद्ध हैं। यदि कोई अपवाद है, तो परिवर्तनों को वापस लाया जाता है।

मैं इसे लेता हूं कि उनका एक ही व्यवहार होता है; सही?

हां जिन स्थानों पर आपने पहले commit_on_success इस्तेमाल किया था, उसमें आपको परमाणु का उपयोग करना चाहिए।

चूंकि नए लेनदेन प्रणाली को अधिक मजबूत और सुसंगत बनाने के लिए बनाया गया है, हालांकि, यह संभव है कि आप अलग-अलग व्यवहार देख सकें। उदाहरण के लिए, यदि आप डेटाबेस त्रुटियों को पकड़ते हैं और जारी रखने का प्रयास करते हैं तो आपको एक TransactionManagementError दिखेगा, जबकि पिछले व्यवहार अपरिभाषित और शायद मामूली निर्भर था।

लेकिन, ठीक से काम कर रहे हैं, सब कुछ उसी तरह काम करना जारी रखना चाहिए।


Comments