gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:39:48 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 那样干净或细粒度成员。

最佳答案

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

由驱动程序引发并通过 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/56044922/

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