2 Soru: Sqlalchemy hataya sarılmış psycopg2 hatası nasıl erişilir

tarafından oluşturulan soru Wed, May 8, 2019 12:00 AM

SQLalchemy ve psycopg2 kullanarak Postgres'teki bir masaya panda veri çerçevesi yüklüyorum. SQLalchemy hatası içindeki psycopg2 hatasına nasıl erişirim?

Koduma yalnızca, boş olmayan kısıtlamayı ihlal eden bir sütundaki boş bir değer nedeniyle bir hata oluşturduğunda bir istisna yazmak istiyorum. Bu kesin pSQL hatasını psycopg2 ile nasıl test edeceğimi biliyorum, ancak kodumu çalıştırdığımda bir SQLalchemy hatası veriyor.

İşte hata:

  

SQLalchemy.exc.IntegrityError: (psycopg2.errors.NotNullViolation) sütunda boş değer var ...

Gerekli istisna burada:

from sqlalchemy import exc

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

İşte yapmak istediğim şey:

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

06003509911110000101035062'yi test edebileceğimi biliyorum, ancak bu sqlalchemy.exc.IntegrityEror.orig üyesini kullanmak kadar temiz veya ince taneli değil.

    
0
2 Yanıtlar                              2                         

Sorunuzda belirttiğiniz gibi, dbapi'nin ortaya çıkardığı temel istisnaya, SQLAlchemy istisnasının 060035099111100101033506 özniteliği aracılığıyla erişebilirsiniz.

Sürücünün ortaya çıkardığı ve SQLAlchemy aracılığıyla yayılan herhangi bir istisna, pgcode , burada dokümanlar belirtilir:

  

Sarılmış istisna nesnesi, orig özelliğinde kullanılabilir. Onun   türü ve özellikleri, DB-API uygulamasına özgüdür .

(vurgu benim)

Psikopos dokümanlarına tabanları için bakma .orig adlandırdıkları öznitelikler 06003509911110000101035062:

  

Arka uç tarafından döndürülen hata kodunu temsil eden dize, Yok ise   müsait değil. Hata kodları modülü sembolik sabitleri içerir   PostgreSQL hata kodlarını gösterir.

Öyleyse, DBAPIError neyin peşinde olduğunu anlamalı gibi gözüküyor, ancak eğer herhangi bir nedenden ötürü psycopg kodları istisna durumlarında kullanılamaz hale getirirse, bu durum gerçekten de sqlalchemy'nin sadece istisnalarını tamamlayıp geçerken ele alabileceği bir şey değildir sana bağlı.

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

İşte başvuru için son kodum:

Error     
1
2019-05-10 15: 22: 15Z
pgcode
kaynak yerleştirildi İşte