JSONB
của SQLAlchemy loại có contains()
phương thức cho @>
toán tử trong Postgresql. @>
toán tử được sử dụng để kiểm tra xem giá trị bên trái có chứa các mục nhập giá trị / đường dẫn JSON bên phải ở cấp cao nhất hay không. Trong trường hợp của bạn
data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb
Hoặc trong python
the_value = 'one'
Session().query(Item).filter(Item.data.contains(
{'nested_list': [{'nested_key': the_value}]}
))
Phương thức chuyển đổi cấu trúc python của bạn thành chuỗi JSON phù hợp cho cơ sở dữ liệu.
Trong Postgresql 12, bạn có thể sử dụng các hàm đường dẫn JSON:
import json
Session().query(Item).\
filter(func.jsonb_path_exists(
Item.data,
'$.nested_list[*].nested_key ? (@ == $val)',
json.dumps({"val": the_value})))