sqlalchemy filtrowanie po kolumnie JSONB

0

Cześć mam problem po filtrowaniu na kolumnie JSONB. struktura tej kolumny wygląda następująco:

jsonb_column = {
    informacje: {
        dane: [
                      {"klucz1": "wartosc1", "klucz2": "wartosc2"},
                      {"klucz1": "inna_wartosc1", "klucz2": "inna_wartosc2}"
        ]
    }
}

Powiedzmy, że chcę zrobić filter na query który przeszuka cała liste dane i znajdzie wartość klucz1 == "wartosc1"
Potrafię zrobić subquery z labelką na listę dane

subquery = session.query(Class.jsonb_column[("informacje", "dane")].label("dane")).subquery()

Tylko już nie wiem jak dalej zrobić query filter.
Może da się jakość to obejśc bez subquery?

0

Nie wiem jak to można zapisać w sql alchemy, ale w najgorszym wypadku pewnie da się napisać jakieś raw query. Postgres ma operator do wyciągania wartości z json fielda spod podanego klucza, zobacz:
https://www.db-fiddle.com/f/u7s9fjc5DyHTp1Tihd4ky8/0
https://www.postgresql.org/docs/9.5/functions-json.html

Może jeszcze to się przyda: https://docs.sqlalchemy.org/en/13/dialects/postgresql.html#sqlalchemy.dialects.postgresql.JSON.Comparator.astext

1

Próbowałeś użyć do tego itertoolsów?
Polecam flatten:
https://more-itertools.readthedocs.io/en/stable/

Powinno ci spłaszczyć strukturę do wydobycia odpowiednich danych, chyba że coś zle rozumiem z tego co chcesz uzyskać

1 użytkowników online, w tym zalogowanych: 0, gości: 1