我的PSQL表类型数组中有一个整数类型的列,让我们调用tags
列。我有一个类型为整数的Python列表,让我们来看看。称之为categories
。
如果tags列与categories数组有一个或多个匹配的整数,我如何运行SQLAlchemy查询以便返回表中的任何行?
答案 0 :(得分:3)
假设categories
的列表不是很大,这是使用每个类别的OR
any(...)
进行处理的一种方式:
q = db.session.query(MyTable)
clauses = [MyTable.tags.any(cat_id) for cat_id in categories]
q = q.filter(db.or_(*clauses))
for r in q.all():
print(r)
答案 1 :(得分:1)
只需使用记录在案here的in_
即可。在他们的例子中
query.filter(User.name.in _([' ed',' wendy',' jack'])
列表['ed, 'wendy', 'jack']
是您的categories
,而不是User.name
您使用的是您的表格和tags
列。
希望它有所帮助。
答案 2 :(得分:1)
接近一个相同的问题,我发现in_运算符(标记为答案)不起作用:我得到了一个"格式错误的ARRAY字面值"错误(注意:在String类型的列上给出过滤器的示例,而不是ARRAY类型的列) @van发起了对我有用的方法。但是,在我的情况下,db对象没有or_属性。为了让它工作,我只是直接从SQLAlchemy导入or_:
from sqlalchemy import or_
# ...
q = db.session.query(MyTable)
clauses = [MyTable.tags.any(cat_id) for cat_id in categories]
q = q.filter(or_(*clauses))
for r in q.all():
print(r)
Upvotes属于@van(我已经评论过他,但没有声誉 - 对不起面包车。)