PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

SQLAlchemy:lọc các giá trị được lưu trữ trong danh sách lồng nhau của trường JSONB

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})))



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi khi ánh xạ các mảng postgres trong Spring JPA

  2. Cách chuyển mảng kiểu tùy chỉnh vào hàm Postgres

  3. Tạo bảng ở chế độ một người dùng trong postgres

  4. GROUP BY trong Postgres - không bình đẳng cho kiểu dữ liệu JSON?

  5. Cách Atanh () hoạt động trong PostgreSQL