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

SQLAlchemy:JSONBフィールドのネストされたリストに格納されている値のフィルタリング

    SQLAlchemyのJSONB タイプにはcontains()があります @>のメソッド Postgresqlの演算子。 @> 演算子は、左側の値に最上位の右側のJSONパス/値エントリが含まれているかどうかを確認するために使用されます。あなたの場合

    data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
    

    またはPythonで

    the_value = 'one'
    
    Session().query(Item).filter(Item.data.contains(
        {'nested_list': [{'nested_key': the_value}]}
    ))
    

    このメソッドは、Python構造をデータベースに適したJSON文字列に変換します。

    Postgresql 12では、JSONパス関数を使用できます:

    import json
    
    Session().query(Item).\
        filter(func.jsonb_path_exists(
            Item.data,
            '$.nested_list[*].nested_key ? (@ == $val)',
            json.dumps({"val": the_value})))
    



    1. ロックの総数がロックテーブルのサイズを超えています

    2. postgres-where in(list)-列は存在しません

    3. InformaticaPowerCenterでのEasysoftODBCドライバーの使用

    4. SQLServerテーブルからランダムな行を取得する方法-SQLServer/TSQLチュートリアルパート117