JSONB
на SQLAlchemy типът има contains()
метод за @>
оператор в Postgresql. @>
Операторът се използва, за да се провери дали лявата стойност съдържа десните записи за път/стойност в JSON на най-горното ниво. Във вашия случай
data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
Или в python
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
Методът преобразува вашата python структура в подходящ JSON низ за базата данни.
В Postgresql 12 можете да използвате функциите за JSON пътя:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))