如何在 flask_sqlalchemy 中查询 ScalarListType

Posted

技术标签:

【中文标题】如何在 flask_sqlalchemy 中查询 ScalarListType【英文标题】:How can I query a ScalarListType in flask_sqlalchemy 【发布时间】:2018-09-10 02:11:00 【问题描述】:

我想在 flask_sqlalchemy 中插入一个整数列表作为单列数据类型, 我找到了ScalarListType in the package SQLAlchemy-Utils:

from sqlalchemy_utils import ScalarListType 

class Foo():
    id = db.Column(db.Integer, primary_key=True)
    list = db.Column(ScalarListType(int))

我可以通过 id 查询 foo:

foo = Foo.query.filter(Foo.id==1).first()

那么,foo.list 是一个整数列表,如[0, 0, 1, 0]

但是,如何为列表中的索引构建查询?例如。类似Foo.list[3]==1

我找不到任何线索,请帮帮我!

【问题讨论】:

当您尝试foo.list[3] 时会发生什么?或者,您只是想查找列表中包含1 的索引吗? 当我尝试foos = Foo.query.filter_by(Foo.list[3]==1).all()时,我得到了错误NotImplementedError: Operator 'getitem' is not supported on this expression,我可以看到pgAdmin中列表的数据类型是文本。 foo.list 可能有多个 1 只是为了进一步缩小问题范围:您是否试图找出该列表在第三个索引中是否有 1,因此您可以在从数据库中检索到它之前对其进行过滤? 嘿,我稍微编辑了这个问题——这仍然描述了你在寻找什么吗? 【参考方案1】:

我不确定 ScalarListType 是否能够完成你想要的——它看起来不像是为通过索引查询而构建的。请参阅the source code here——它只是一个用逗号分隔值的文本列。

你也许可以用裸 SQL 破解一些东西,但这可能意味着在某处使用 LIKE,或者拆分 gets complicated quickly 的字符串。

从长远来看,最好只为这些数据创建一个单独的列。

【讨论】:

以上是关于如何在 flask_sqlalchemy 中查询 ScalarListType的主要内容,如果未能解决你的问题,请参考以下文章

flask_SQLALchemy之多表查询

flask_sqlalchemy获取动态 model名称 和 动态查询

搞懂flask_sqlalchemy常用操作

搞懂flask_sqlalchemy常用操作

如何在 flask_sqlalchemy 中使用 PostgreSQL 的“INSERT...ON CONFLICT”(UPSERT)功能?

如何将flask_sqlalchemy orm中的数据添加到WTForm FieldList?