sqlalchemy.exc.InternalError:(psycopg2.errors.InternalError_



使用SQL,我可以通过两个查询的UNION获得所需内容,其中第一个子查询返回别名枚举列的值,第二个子查询返回该别名列的NULL

SELECT table.enumcol AS description
FROM table
WHERE <expression1>
UNION
SELECT NULL AS description
FROM t
WHERE <expression_2>
;

有了SQLAlchemy,我可以接近它,但不是完全。

q1 = (
self.dbsession.query(
Table.enumcol.label("description")
)
.filter(<expression_1>)
.subquery()
)
q2 = (
self.dbsession.query(
literal(None).label("description")
)
.filter(<expression_2>)
.subquery()
)
union_list = (
self.dbsession.query("description")
.select_entity_from(
union_all(q1.select(), q2.select())
)
.all()
)

这是错误消息:

sqlalchemy.exc.InternalError: (psycopg2.errors.InternalError_) failed to find conversion function from unknown to description_enum

我不知道该怎么解决这个问题。

为了记录,我最初分别编写了每个子查询,首先在SQL中,然后在SQLAlchemy中使用.all()而不是.subquery()union_all()。我能够成功地运行每一个,返回正确的结果。

感谢IRC中#sqlalchemy中的用户jjhoo,他们给了我不使用.subquery()和更有效地使用.union_all()的提示。这是适用于我的解决方案。

q1 = (
self.dbsession.query(
Table.enumcol.label("description")
)
.filter(<expression_1>)
)
q2 = (
self.dbsession.query(
literal(None).label("description")
)
.filter(<expression_2>)
)
union_list = q1.union_all(q2).all()

相关内容

最新更新