2015-08-06 11 views
9

Ho un po 'di codice in cui provo a scrivere su un database e, in alcuni casi, ottengo un errore di integrità (previsto) a causa di un vincolo di unicità. Sto cercando di cogliere l'errore, ma per qualche misterioso motivo non posso. Il mio codice è simile al seguente (in esecuzione in un ciclo, semplificata per chiarezza):Perché psycopg2 IntegrityError non viene rilevato?

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 

L'uscita quando ho eseguito lo script è simile al seguente:

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}] 

Non è mai anche stampe "catturati", così non pensa di avere un errore di integrità. Tuttavia, quando stampo l'errore, si tratta di un errore di integrità. Qualsiasi aiuto sarà apprezzato!

risposta

12

Dal momento che si sta utilizzando SQLAlchemy, provare:

from sqlalchemy.exc import IntegrityError 

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

Il sqlalchemy avvolge l'eccezione psycopg2 alla propria eccezione

+0

successo! Grazie mille, è stato così. – Leo

Problemi correlati