2015-08-06 23 views
9

Veritabanına yazmayı denediğim bazı kodlar var ve bazı durumlarda benzersiz bir kısıtlama nedeniyle (beklenen) bir dürüstlük elde edersiniz. Hatayı yakalamaya çalışıyorum ama bazı gizemli sebepler için yapamam. Kodum (netlik için basitleştirilmiş bir döngüde, çalışan) aşağıdaki gibidir:Neden psycopg2 IntegrityError yakalanmıyor?

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 

Senaryonun şöyle çalıştırmak çıkışı:

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

Hiçbir zaman bile baskılar "yakalandı", yani Bir dürüstlüğüm olduğunu düşünmüyorum. Ancak hatayı yazdırdığımda, bir bütünlük hatasıdır. Herhangi bir yardım takdir edilecektir!

cevap

12

sen SQLAlchemy kullandığınıza göre, deneyin:

from sqlalchemy.exc import IntegrityError 

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

sqlalchemy kendi istisna

+0

Başarı için psycopg2 istisna sarar! Çok teşekkürler, öyleydi. – Leo

İlgili konular