PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Обединяване с функция за връщане на набор (SRF) и колони за достъп в SQLAlchemy

Оказва се, че това не се поддържа директно от SA, но правилното поведение може да бъде постигнато с ColumnClause и FunctionElement . Първо импортирайте тази рецепта както е описано от zzzeek в този проблем на SA . След това създайте специален unnest функция, която включва WITH ORDINALITY модификатор:

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"

След това можете да го използвате в обединения, подреждане и т.н. по този начин:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. защо записите в една таблица предотвратяват вакуумите в друга?

  2. Postgresql -- почистване на HTML тагове в средата на низа

  3. PostgreSQL Query за избор на данни от миналата седмица?

  4. Как да създадете еквивалент на колона за идентичност на SQL Server в Postgres

  5. Как да съединя елементи от масив jsonb в Postgres?