Фильтр Sqlalchemy для столбца JSONB по contains

#postgresql #sqlalchemy

#postgresql #sqlalchemy

Вопрос:

Я пытаюсь использовать столбец JSONB и применить .contains к нему. Это значение столбца представляет собой список строк.

Вот моя модель:

 class MessageDocument(Document):
    __tablename__ = "message"
    id = Column(Integer, primary_key=True, autoincrement=True)
    # ...
    concerned = Column(JSONB(), default="[]")  # list of str
 

И мой запрос:

 .filter(MessageDocument.concerned.contains([character.id]))
 

Но есть ошибка:

 E       sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedFunction) operator does not exist: json @> unknown
E       LINE 3: WHERE message.concerned @> '["xena"]' AND message.first_mess...
E                                       ^
E       HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
 

Я последовал за многими ответами здесь, но без успеха ( .astext , .as_text() , cast(...) . Как я могу справиться с моим списком строк JSONB, чтобы сделать это .contains ?

Комментарии:

1. откуда взялся этот @> операнд?

2. Я думаю, что он сгенерирован sqlalchemy