sql >> Database teknologi >  >> RDS >> PostgreSQL

Sammenføjning med sæt-retur-funktion (SRF) og adgangskolonner i SQLAlchemy

Det viser sig, at dette ikke er direkte understøttet af SA, men den korrekte adfærd kan opnås med en ColumnClause og en FunctionElement . Importer først denne opskrift som beskrevet af zzzeek i dette SA-problem . Opret derefter en speciel unnest funktion, der inkluderer WITH ORDINALITY modifikator:

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 så bruge det i joins, bestilling osv. sådan her:

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. Hvordan kan jeg bruge en PostgreSQL-triggere til at gemme ændringer (SQL-sætninger og rækkeændringer)

  2. WHERE-tilstand i MySQL med 16 forskellige forespørgselseksempler

  3. Hvordan vælger man række efter primærnøgle, én række 'ovenfor' og en række 'under' ved anden kolonne?

  4. tegnsæt i MySQL