JSONB
von SQLAlchemy type hat den contains()
Methode für @>
Operator in Postgresql. Der @>
-Operator wird verwendet, um zu prüfen, ob der linke Wert die richtigen JSON-Pfad/Wert-Einträge auf der obersten Ebene enthält. In Ihrem Fall
data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
Oder in Python
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
Die Methode konvertiert Ihre Python-Struktur in einen geeigneten JSON-String für die Datenbank.
In Postgresql 12 können Sie die JSON-Pfadfunktionen verwenden:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))