sql >> Databasteknik >  >> RDS >> PostgreSQL

Gå med i set-returning function (SRF) och åtkomstkolumner i SQLAlchemy

Det visar sig att detta inte direkt stöds av SA, men det korrekta beteendet kan uppnås med en ColumnClause och en FunctionElement . Importera först detta recept som beskrivs av zzzeek i detta SA-problem . Skapa sedan en speciell unnest funktion som inkluderar WITH ORDINALITY modifierare:

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"

Du kan sedan använda den i joins, beställningar etc. så här:

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. PDO-statement (MySQL):infogning av värde 0 i ett bit(1)-fält resulterar i 1 skrivet i tabell

  2. Anonymisera dina plandetaljer inbyggt i Plan Explorer

  3. Typcast-sträng till heltal

  4. Hur kan jag iterera genom en MySQL-resultatuppsättning?