2015-08-06 6 views
9

मेरे पास कुछ कोड है जहां मैं डेटाबेस को लिखने का प्रयास करता हूं, और कुछ मामलों में एक विशिष्टता बाधा के कारण एक (अपेक्षित) अखंडता प्राप्त करता है। मैं त्रुटि पकड़ने की कोशिश कर रहा हूं, लेकिन कुछ रहस्यमय कारणों से मैं नहीं कर सकता। मेरे कोड इस तरह दिखता है (एक पाश, स्पष्टता के लिए सरलीकृत में चल रहे):psycopg2 ईमानदारी क्यों पकड़ा नहीं जा रहा है?

from psycopg2 import IntegrityError 
try: 
    data = { 
      'one': val1, 
      'two': val2 
     } 

    query=tablename.insert().values(data) 
    target_engine.execute(query) 
except IntegrityError as e: 
    print "caught" 
except Exception as e: 
    print "uncaught" 
    print e 
    break 

उत्पादन जब मैं स्क्रिप्ट इस तरह दिखता है चलाएँ:

uncaught 
(psycopg2.IntegrityError) duplicate key value violates unique constraint "companies_x_classifications_pkey" 
DETAIL: Key (company_id, classification_id)=(37802, 304) already exists. 
[SQL: 'INSERT INTO companies_x_classifications (company_id, classification_id) VALUES (%(company_id)s, %(classification_id)s)'] [parameters: {'classification_id': 304, 'company_id': 37802L}] 

यह कभी भी प्रिंट "पकड़ा", इसलिए ऐसा नहीं लगता कि मेरे पास एक ईमानदारी है। फिर भी जब मैं त्रुटि मुद्रित करता हूं, यह एक अखंडता त्रुटि है। किसी भी मदद की सराहना की जाएगी!

उत्तर

12

आप SQLAlchemy का उपयोग कर रहे हैं, की कोशिश:

from sqlalchemy.exc import IntegrityError 

try: 
... 
except IntegrityError as e: 
    print "caught" 

sqlalchemy अपनी ही अपवाद

+0

सफलता के लिए psycopg2 अपवाद लपेटता! बहुत बहुत धन्यवाद, वह था। – Leo

संबंधित मुद्दे