PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

SQLAlchemy:filtrowanie według wartości przechowywanych w zagnieżdżonej liście pola JSONB

JSONB SQLAlchemy typ ma contains() metoda dla @> operator w Postgresql. @> Operator służy do sprawdzania, czy lewa wartość zawiera prawe wpisy ścieżki/wartości JSON na najwyższym poziomie. W twoim przypadku

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

Lub w Pythonie

the_value = 'one'

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

Metoda konwertuje strukturę Pythona na odpowiedni ciąg JSON dla bazy danych.

W Postgresql 12 możesz użyć funkcji ścieżki 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. Łączenie PostgreSQL 9.2.1 z Hibernate

  2. Co powoduje, że More nie jest rozpoznawany... błąd podczas uruchamiania Postgresql 11 na komputerze z systemem Windows?

  3. Kilka obszarów ulepszeń w PostgreSQL 9.4

  4. PostgreSQL działa wolno? Wskazówki i porady, jak dotrzeć do źródła

  5. PostgreSql WSTAW Z WYBRANEGO ID POWRACAJĄCEGO