SQLAlchemy Postgres UnsupportedCompilationError при использовании select () из aggregate_order_by () - PullRequest
0 голосов
/ 01 июля 2019

Кажется, что 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'>

Что я делаю не так?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...