sql >> Databasteknik >  >> RDS >> PostgreSQL

SQLAlchemy:filtrering på värden lagrade i kapslad lista i JSONB-fältet

SQLAlchemys JSONB typen har contains() metod för @> operatör i Postgresql. @> operatorn används för att kontrollera om det vänstra värdet innehåller rätt JSON-sökväg/värdeposter på översta nivån. I ditt fall

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

Eller i python

the_value = 'one'

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

Metoden konverterar din pythonstruktur till lämplig JSON-sträng för databasen.

I Postgresql 12 kan du använda JSON-sökvägsfunktionerna:

import json

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



  1. Hur man länkar en Access-databas till SQL Server i Access 2016

  2. Tips för att trimma prestanda för PostgreSQL

  3. Välj (hämta) alla poster från flera scheman med Postgres

  4. Postgresql - det går inte att släppa databasen på grund av vissa automatiska anslutningar till DB