JSONB
de SQLAlchemy le type a le contains()
méthode pour le @>
opérateur dans Postgresql. Le @>
L'opérateur est utilisé pour vérifier si la valeur de gauche contient les bonnes entrées de chemin/valeur JSON au niveau supérieur. Dans votre cas
data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
Ou en python
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
La méthode convertit votre structure python en chaîne JSON appropriée pour la base de données.
Dans Postgresql 12, vous pouvez utiliser les fonctions de chemin JSON :
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))