sql >> Databáze >  >> RDS >> PostgreSQL

SQLAlchemy:filtrování podle hodnot uložených ve vnořeném seznamu pole JSONB

JSONB SQLAlchemy typ má contains() metoda pro @> operátor v Postgresql. @> Operátor se používá ke kontrole, zda levá hodnota obsahuje pravé položky cesty/hodnoty JSON na nejvyšší úrovni. Ve vašem případě

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

Nebo v pythonu

the_value = 'one'

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

Tato metoda převede vaši strukturu pythonu na vhodný řetězec JSON pro databázi.

V Postgresql 12 můžete použít funkce cesty JSON:

import json

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



  1. Získejte ID řádku tabulky SQLite FTS3

  2. Proč by podmínka IN byla pomalejší než =v sql?

  3. Představujeme novou funkci:Skupina vždy k dispozici

  4. desetinné (s,p) nebo číslo (s,p)?