sql >> データベース >  >> RDS >> PostgreSQL

SQLAlchemyのset-returningfunction(SRF)およびアクセス列との結合

    これは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. iOS-コアデータとサーバーデータベースの同期のベストプラクティス

    2. アダプティブサーバーが使用できないか、PHPからSQLServerへの接続中にエラーが発生しません

    3. Oracle 18cの新機能:パーティショニングのオンライン変更

    4. OracleWITH句はデータを返しません