Используя 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
I Понятия не имею, что попытаться решить эту проблему.
Для записи я изначально писал каждый подзапрос отдельно, сначала в SQL, затем в SQLAlchemy, используя .all()
вместо .subquery()
и union_all()
. Мне удалось успешно запустить каждый из них, возвращая правильные результаты.