PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

जब Django postgresql के साथ क्रमबद्ध लेनदेन अलगाव स्तर का उपयोग कर रहा है तो कौन से विशिष्ट अपवाद क्रमबद्धता विफलता का प्रतिनिधित्व करते हैं?

हम्म, अच्छा सवाल। दस्तावेज़ीकरण का तात्पर्य है कि उपयुक्त अपवाद एक TransactionManagementError :

हालांकि, स्रोत कोड एक मजबूत सुराग देता है कि यह नहीं है:

class TransactionManagementError(ProgrammingError):
    """Transaction management is used improperly."""
    pass

ध्यान दें कि यह एक ProgrammingError है। , जो वास्तव में प्रोग्रामर त्रुटि को इंगित करने के लिए उपयोग किया जाता है (अर्थात "अनुचित तरीके से उपयोग किया गया")।

यदि हम psycopg (Python एडेप्टर का उपयोग PostgreSQL समर्थन के लिए किया जाता है) के लिए प्रलेखन को देखते हैं, तो हम देखते हैं कि यह एक psycopg2.extensions.TransactionRollbackError :

लेकिन Django इसके साथ क्या करता है? ठीक है, जैसा कि यहां प्रलेखित है , यह Django समकक्षों में मानक पायथन डीबी एपीआई 2.0 अपवादों को लपेटता है, और __cause__ सेट करता है मूल अपवाद के लिए विशेषता। तो निम्नलिखित शायद सबसे विशिष्ट जाँच है जो आप कर सकते हैं:

from django.db import OperationalError
from psycopg2.extensions import TransactionRollbackError

for retries in range(0, 3):
    try:
        with transaction.atomic():
            MyModel.objects.update(foo='bar')
    except OperationalError as e:
        if e.__cause__.__class__ == TransactionRollbackError:
            continue
        else:
            raise            
    else:
        break

PostgreSQL द्वारा उजागर त्रुटि विवरण के आधार पर (e के माध्यम से उपलब्ध .__cause__.diag ) इससे भी अधिक विशिष्ट परीक्षण लिखना संभव हो सकता है।

आम तौर पर, हालांकि, पायथन डीबी एपीआई 2.0 प्रलेखन में कहा गया है कि OperationalError लेन-देन के मुद्दों के लिए वास्तव में सही अपवाद प्रकार है, इसलिए उम्मीद है कि इसे पकड़ना एक उचित प्रभावी डेटाबेस-अज्ञेय समाधान होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रेल का दायरा महीने के भीतर बनाया गया

  2. psql क्वेरी आउटपुट को एक वेरिएबल में स्टोर करने के लिए बैच फ़ाइल

  3. लक्ष्य तालिका में अद्वितीय बाधा के बिना डुप्लिकेट प्रविष्टियों से बचें?

  4. तैयार स्टेटमेंट में खाली LIKE का प्रदर्शन प्रभाव

  5. Postgresql में एक पंक्ति का हैश मान ढूँढना