JSONB
di SQLAlchemy tipo ha il contains()
metodo per il @>
operatore in Postgresql. Il @>
viene utilizzato per verificare se il valore di sinistra contiene le voci di percorso/valore JSON di destra al livello superiore. Nel tuo caso
data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
O in Python
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
Il metodo converte la tua struttura Python in una stringa JSON adatta per il database.
In Postgresql 12 puoi usare le funzioni del percorso JSON:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))