JSONB
SQLAlchemy typ ma contains()
metoda dla @>
operator w Postgresql. @> Operator służy do sprawdzania, czy lewa wartość zawiera prawe wpisy ścieżki/wartości JSON na najwyższym poziomie. W twoim przypadku
data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
Lub w Pythonie
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
Metoda konwertuje strukturę Pythona na odpowiedni ciąg JSON dla bazy danych.
W Postgresql 12 możesz użyć funkcji ścieżki JSON:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))