如何在 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获取动态 model名称 和 动态查询
如何在 flask_sqlalchemy 中使用 PostgreSQL 的“INSERT...ON CONFLICT”(UPSERT)功能?