sql >> Databáze >  >> RDS >> PostgreSQL

Spojení pomocí funkce vracení sady (SRF) a přístupových sloupců v SQLAlchemy

Ukázalo se, že to SA přímo nepodporuje, ale správného chování lze dosáhnout pomocí ColumnClause a FunctionElement . Nejprve importujte tento recept jak popisuje zzzeek v tento problém SA . Poté vytvořte speciální unnest funkce, která obsahuje WITH ORDINALITY modifikátor:

class unnest_func(ColumnFunction):
    name = 'unnest'
    column_names = ['unnest', 'ordinality']

@compiles(unnest_func)
def _compile_unnest_func(element, compiler, **kw):
    return compiler.visit_function(element, **kw) + " WITH ORDINALITY"

Poté jej můžete použít v připojení, objednávání atd. takto:

act_ref = unnest_func(Activity.ob_refs)
query = (query
    .add_columns(act_ref.c.unnest, act_ref.c.ordinality)
    .outerjoin(act_ref, sa.true())
    .outerjoin(Subscription, Subscription.ob_ref == act_ref.c.unnest)
    .order_by(act_ref.c.ordinality.desc()))



  1. MariaDB POWER() Vysvětleno

  2. PHP7.0-FPM s Dockerem:Nelze načíst dynamickou knihovnu OCI8

  3. Nelze okamžitě přijímat více oznámení v Npgsql

  4. ORA-06502:PL/SQL:numerická nebo hodnotová chyba:vyrovnávací paměť řetězce znaků je příliš malá - Spouštění pomocí rozhraní OCI