2015-08-06 37 views
9

Mam kod, w którym próbuję zapisać do bazy danych, aw niektórych przypadkach uzyskać (oczekiwany) integrityerror ze względu na ograniczenie wyjątkowości. Próbuję złapać błąd, ale z jakiegoś tajemniczego powodu nie mogę. Mój kod wygląda następująco (działa w pętli, uproszczony dla jasności):Dlaczego program psycopg2 IntegrityError nie jest przechwytywany?

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 

Wyjście gdy uruchamiam skrypt wygląda tak:

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

To nawet nie drukuje „złowione”, tak nie sądzę, że mam uczciwość. Jednak kiedy wydrukuję błąd, jest to błąd integralności. Każda pomoc zostanie doceniona!

Odpowiedz

12

Ponieważ używasz SQLAlchemy, spróbuj:

from sqlalchemy.exc import IntegrityError 

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

sqlalchemy zawijany wyjątek psycopg2 do własnej wyjątkiem

+0

sukces! Wielkie dzięki, to było to. – Leo