gpt4 book ai didi

python - 如何访问包装在sqlalchemy错误中的psycopg2错误

转载 作者:行者123 更新时间:2023-12-03 08:44:38 25 4
gpt4 key购买 nike

我正在使用SQLalchemy和psycopg2将 Pandas 数据框上传到Postgres中的表。如何访问SQLalchemy错误内的psycopg2错误?

我只想在异常引发错误的情况下将异常写入代码中,因为列中的空值违反了非空约束。我知道如何使用psycopg2测试此确切的pSQL错误,但是当我运行我的代码时,它将返回SQLalchemy错误。

这是错误:

SQLalchemy.exc.IntegrityError: (psycopg2.errors.NotNullViolation) null value in column...



这是必要的异常(exception):
from sqlalchemy import exc

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

这是我想做的:
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

我知道我可以测试 sqlalchemy.exc.IntegrityEror.orig,但这不如使用 pgcode成员那么干净或细粒度。

最佳答案

正如您在问题中指出的那样,您可以通过SQLAlchemy异常的.orig属性访问dbapi引发的基础异常。

驱动程序引发并通过SQLAlchemy传播的任何异常都由 DBAPIError 的子类包装,它的文档状态为:

The wrapped exception object is available in the orig attribute. Its type and properties are DB-API implementation specific.



(强调我的)

在psycopg文档中查看其基本 Error ,他们命名的属性之一是 pgcode:

String representing the error code returned by the backend, None if not available. The errorcodes module contains symbolic constants representing PostgreSQL error codes.



因此, <sqla_exc>.orig.pgcode看起来应该可以得到您想要的东西,但是如果由于某种原因psycopg无法以其异常状态提供其代码,则sqlalchemy确实无法解决该问题,因为它只包装了它们的异常并将其传递给您。

关于python - 如何访问包装在sqlalchemy错误中的psycopg2错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57408971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com