如何在可变数组中使用 SQLAlchemy 进行搜索

我正在尝试使用可变数组来存储带有 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)))

我可以更新加星标的属性,从它追加和弹出项目。我的问题是如何搜索在数组中具有特定项目的行。这是我的查询:


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


我在这里缺少什么?


动漫人物
浏览 159回答 1
1回答

jeck猫

似乎db.ARRAY是 SQL 标准/多供应商数组类型sqlalchemy.types.ARRAY。相反,您应该使用特定于方言的类型(如错误中所述)sqlalchemy.dialects.postgresql.ARRAY。简而言之:from sqlalchemy.dialects.postgresql import ARRAY并使用它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python