JSONB
de SQLAlchemy tipo tiene el contains()
método para el @>
operador en Postgresql. El @>
El operador se utiliza para comprobar si el valor de la izquierda contiene las entradas de valor/ruta JSON correctas en el nivel superior. En tu caso
data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
O en python
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
El método convierte su estructura de python en una cadena JSON adecuada para la base de datos.
En Postgresql 12 puede usar las funciones de ruta JSON:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))