SQLAlchemy's JSONB
type heeft de contains()
methode voor de @>
operator in Postgresql. De @>
operator wordt gebruikt om te controleren of de linkerwaarde de juiste JSON-pad/waarde-items op het hoogste niveau bevat. In jouw geval
data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
Of in python
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
De methode converteert je python-structuur naar een geschikte JSON-string voor de database.
In Postgresql 12 kunt u de JSON-padfuncties gebruiken:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))