JSONB
do SQLAlchemy tipo tem o contains()
método para o @>
operador no Postgresql. O @>
O operador é usado para verificar se o valor à esquerda contém as entradas de caminho/valor JSON à direita no nível superior. No seu caso data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
Ou em python
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
O método converte sua estrutura python em uma string JSON adequada para o banco de dados.
No Postgresql 12 você pode usar as funções de caminho JSON:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))