SQLAlchemys JSONB
typen har contains()
metode til @>
operatør i Postgresql. @>
operator bruges til at kontrollere, om den venstre værdi indeholder den rigtige JSON-sti/værdiindgang på øverste niveau. I dit tilfælde
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 konverterer din python-struktur til en passende JSON-streng til databasen.
I Postgresql 12 kan du bruge JSON-stifunktionerne:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))