2 सवाल: Sqlalchemy त्रुटि में लिपटे psycopg2 त्रुटि का उपयोग कैसे करें

पर बनाया गया सवाल Wed, May 8, 2019 12:00 AM

मैं पैंड्रेस डेटा फ़्रेम को SQLalchemy और psycopg2 का उपयोग करके पोस्टग्रेज़ में एक टेबल पर अपलोड कर रहा हूं। मैं SQLycchemy त्रुटि के भीतर psycopg2 त्रुटि का उपयोग कैसे करूं?

मैं अपने कोड में केवल एक अपवाद लिखना चाहता हूं जब यह एक स्तंभ में एक शून्य मान के कारण एक त्रुटि उठाता है जो नॉट-नल बाधा का उल्लंघन करता है। मुझे पता है कि psycopg2 के साथ इस सटीक pSQL त्रुटि के लिए परीक्षण कैसे किया जाता है, लेकिन जब मैं अपना कोड चलाता हूं तो यह SQLalchemy त्रुटि देता है।

यहां त्रुटि है:

  

SQLalchemy.exc.IngrgrityError: (psycopg2.errors.NotNullViolation) कॉलम में शून्य मान ...

यहां आवश्यक अपवाद है:

from sqlalchemy import exc

try:
    df.to_sql(name='sql_table', con=engine, if_exists='append', index=False)
except exc.IntegrityError:

यहां वह है जो मैं करना चाहता हूं:

from sqlalchemy import exc
import psycopg2

try:
    df.to_sql(name='sql_table', con=engine, if_exists='append', index=False)
except exc.IntegrityError as ex:
    ex = ex.psycopg2error
    if ex.pgcode == '23502'
        print('Data not uploaded: null value in a column violates non-null constraint')
    else:
        raise

मुझे पता है कि मैं 0600350991100100135035062 का परीक्षण कर सकता हूं, लेकिन यह sqlalchemy.exc.IntegrityEror.orig सदस्य का उपयोग करने के रूप में साफ या ठीक नहीं है।

    
0
2 उत्तर                              2                         

जैसा कि आपने अपने प्रश्न में बताया है, आप dbapi द्वारा उठाए गए अंतर्निहित अपवाद को SQLAlchemy अपवाद की 06003509911001001350350 विशेषता के माध्यम से एक्सेस कर सकते हैं।

ड्राइवर द्वारा उठाए गए और SQLAlchemy के माध्यम से प्रचारित कोई भी अपवाद pgcode , जहाँ यह डॉक्स स्थिति है:

  

लिपटे अपवाद ऑब्जेक्ट मूल विशेषता में उपलब्ध है। इसका   प्रकार और गुण DB-API कार्यान्वयन विशिष्ट हैं।

(जोर मेरा)

उनके आधार के लिए psycopg डॉक्स को देखते हुए .orig62 उनके नाम की विशेषताएँ DBAPIError:

हैं
  

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

तो, 06003509911001001350350 जैसा दिखता है कि आपको जो चाहिए उसके बाद मिलना चाहिए, लेकिन यदि किसी कारण से मानस अपने अपवाद राज्य में अपना कोड उपलब्ध नहीं कराता है, तो यह वास्तव में ऐसा कुछ नहीं है जिसे sqlalchemy संबोधित कर सकते हैं यह सिर्फ उनके अपवाद को पूरा करता है और गुजरता है यह आप पर है।

    
2
2019-05-09 00: 47: 07Z

यहां संदर्भ के लिए मेरा अंतिम कोड है:

Error     
1
2019-05-10 15: 22: 15Z
pgcode
स्रोत रखा गया यहाँ