sql >> Database teknologi >  >> RDS >> PostgreSQL

SQLAlchemy:filtrering på værdier gemt i indlejret liste i JSONB-feltet

SQLAlchemys JSONB typen har contains() metode til @> operatør i Postgresql. @> operator bruges til at kontrollere, om den venstre værdi indeholder den rigtige JSON-sti/værdiindgang på øverste niveau. I dit tilfælde

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

Eller i python

the_value = 'one'

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

Metoden konverterer din python-struktur til en passende JSON-streng til databasen.

I Postgresql 12 kan du bruge JSON-stifunktionerne:

import json

Session().query(Item).\
    filter(func.jsonb_path_exists(
        Item.data,
        '$.nested_list[*].nested_key ? (@ == $val)',
        json.dumps({"val": the_value})))



  1. Sådan fungerer UGE() i MariaDB

  2. Hvordan skal jeg gemme en GUID i Oracle?

  3. 2 måder at returnere rækker, der kun indeholder alfanumeriske tegn i PostgreSQL

  4. Microsoft Access DevCon i Wien Østrig 1. – 2. april 2017