Как искать с помощью SQLAlchemy в изменяемый массив - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь использовать изменяемый массив для хранения данных с помощью SQLAlchemy и Postgres, и я написал эти классы:

class MutableList(Mutable, list):
    def append(self, value):
        list.append(self, value)
        self.changed()

    def pop(self, index=0):
        value = list.pop(self, index)
        self.changed()
        return value

    @classmethod
    def coerce(cls, key, value):
        if not isinstance(value, MutableList):
            if isinstance(value, list):
                return MutableList(value)
            return Mutable.coerce(key, value)
        else:
            return value


class Lead(db.Model):
    __tablename__ = 'leads'

    ...
    starred = db.Column(MutableList.as_mutable(db.ARRAY(db.Integer)))

И я могу обновить свойство starred, добавляя и извлекая из него элементы.У меня вопрос, как искать строку, в которой есть определенный элемент внутри массива.Вот мой запрос:

leads = Lead.query.order_by(Lead.post_date.desc()).filter(Lead.starred.contains(current_user.id)).all()

Но это дает мне следующую ошибку: ARRAY.contains() not implemented for the base ARRAY type; please use the dialect-specific ARRAY type

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 04 октября 2018

Кажется, db.ARRAY - это тип массива SQL стандартный / мультивендорный sqlalchemy.types.ARRAY.Вместо этого вы должны использовать определенный тип диалекта (как отмечено в ошибке) sqlalchemy.dialects.postgresql.ARRAY.Короче говоря:

from sqlalchemy.dialects.postgresql import ARRAY

и используйте это.

...