PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bergabung dengan fungsi set-returning (SRF) dan akses kolom di SQLAlchemy

Ternyata ini tidak secara langsung didukung oleh SA, tetapi perilaku yang benar dapat dicapai dengan ColumnClause dan FunctionElement . Impor pertama resep ini seperti yang dijelaskan oleh zzzeek di masalah SA ini . Kemudian buat unnest khusus fungsi yang menyertakan WITH ORDINALITY pengubah:

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"

Anda kemudian dapat menggunakannya dalam bergabung, memesan, dll seperti ini:

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. Di tempat pembaruan dengan PostgreSQL

  2. Cara mengganti grup yang diambil dengan ekspresi yang dievaluasi (menambahkan nilai integer ke grup yang diambil)

  3. Tampilan Terwujud PostgreSQL

  4. postgres dan python

  5. Beberapa indeks vs indeks tunggal pada beberapa kolom di postgresql