PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

SQLAlchemy:филтриране на стойности, съхранени във вложен списък на полето JSONB

JSONB на SQLAlchemy типът има contains() метод за @> оператор в Postgresql. @> Операторът се използва, за да се провери дали лявата стойност съдържа десните записи за път/стойност в JSON на най-горното ниво. Във вашия случай

data @> '{"nested_list": [{"nested_key": "one"}]}'::jsonb

Или в python

the_value = 'one'

Session().query(Item).filter(Item.data.contains(
    {'nested_list': [{'nested_key': the_value}]}
))

Методът преобразува вашата python структура в подходящ JSON низ за базата данни.

В Postgresql 12 можете да използвате функциите за 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. Агрегирани колони с допълнителни (отличителни) филтри

  2. Относно pglogical производителност

  3. Прехвърляне на данни между бази данни с PostgreSQL

  4. Как to_timestamp() работи в PostgreSQL

  5. PostgreSQL - клауза GROUP BY или да се използва в агрегатна функция