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

IntegrityError:अद्वितीय बाधा और अशक्त उल्लंघनों के बीच अंतर करें

psycopg2 SQLSTATE प्रदान करता है pgcode . के अपवाद के साथ सदस्य, जो आपको मिलान करने के लिए काफी बारीक त्रुटि जानकारी देता है।

python3
>>> import psycopg2
>>> conn = psycopg2.connect("dbname=regress")
>>> curs = conn.cursor()
>>> try:
...     curs.execute("INVALID;")
... except Exception as ex:
...     xx = ex
>>> xx.pgcode
'42601'

देखें परिशिष्ट A:त्रुटि कोड कोड अर्थ के लिए PostgreSQL मैनुअल में। ध्यान दें कि आप व्यापक श्रेणियों के लिए पहले दो वर्णों पर मोटे तौर पर मिलान कर सकते हैं। इस मामले में मैं देख सकता हूँ कि SQLSTATE 42601 syntax_error . है Syntax Error or Access Rule Violation . में श्रेणी।

आप जो कोड चाहते हैं वे हैं:

23505   unique_violation
23502   not_null_violation

ताकि आप लिख सकें:

try:
    principal = cls.objects.create(
        user_id=user.id,
        email=user.email,
        path='something'
    )
except IntegrityError as ex:
    if ex.pgcode == '23505':
        principal = cls.objects.get(
            user_id=user.id,
            email=user.email
        )
    else:
        raise

उस ने कहा, यह upsert करने का एक बुरा तरीका है या merge . @ pr0gg3d संभवतः Django के साथ इसे करने का सही तरीका सुझाने में सही है; मैं Django नहीं करता इसलिए मैं उस पर टिप्पणी नहीं कर सकता। अप्सर्ट/मर्ज के बारे में सामान्य जानकारी के लिए इस विषय पर डिपेज़ का लेख देखें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि:एक से अधिक रिटर्न के साथ क्वेरी के लिए TypedQuery नहीं बना सकता

  2. INNER JOIN . के साथ कॉलम मानों की COUNT संख्या को पोस्टग्रेज करता है

  3. मैं नोड-पोस्टग्रेज के साथ पीजी में कई पंक्तियों को ठीक से कैसे सम्मिलित करूं?

  4. विशिष्ट भूमिका के लिए सभी वस्तु विशेषाधिकार प्राप्त करना

  5. PostgreSQL में XML फ़ाइलें आयात करें