Кажется, что SQLAlchemy не отображает aggregate_order_by()
при использовании его внутри select([])
.
У меня есть выражение PostgreSQL, подобное этому:
ARRAY(
SELECT DISTINCT UNNEST(
array_agg(
CASE WHEN parent_recalls.id IS NOT NULL THEN parent_recalls.oem_id ELSE recalls_recall.oem_id END)
ORDER BY recalls_recall.rank DESC
)
)
) AS oem_id_arr
А когда я использую SQLAlchemy:
from sqlalchemy import func, select, case
from sqlalchemy.dialects import postgresql
from sqlalchemy.dialects.postgresql import aggregate_order_by, array_agg
# RecallsRecall and ParentRecall are sqlalchemy.schema.Table objects
stmt = func.array(
select([
func.unnest(
array_agg(
aggregate_order_by(
case([(
ParentRecall.c.id != None,
ParentRecall.c.oem_id
)], else_=RecallsRecall.oem_id),
RecallsRecall.rank.desc()
)
)
)]
).distinct()
).label('oem_id_arr')
print stmt.compile(dialect=postgresql.dialect())
Я получил:
UnsupportedCompilationError: Compiler <sqlalchemy.sql.compiler.StrSQLCompiler object at 0x7fb3d8bf3d50> can't render element of type <class 'sqlalchemy.dialects.postgresql.ext.aggregate_order_by'>
Что я делаю не так?
Спасибо!