sqlalchemy搜索多个(未知的mumber)关键字

时间:2015-08-04 03:48:37

标签: sqlalchemy keyword chaining

例如,在SQLAlchemy中,我想在我的Item类的“description”列中搜索关键字“foo”,“bar”以及可能但不一定更多的关键字,因此我构建了这样的关键字列表: [“foo”,“bar”],

然后使用原始循环来实现我的目标:

query_obj = session.query(Item)
for k in search_keywords:
query_obj = query_obj.filter(Item.description.like('%{0}%'.format(k)))

但这似乎并不优雅。我认为sqlalchemy可能有更好的解决方案。除了循环和链接之外,有人可以分享一些提示吗?感谢。

P.S。另外,对多个(无限数量)关键字进行“OR”搜索的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

您的代码非常优雅,我认为您无法对其进行大幅改进。

为了解决OR的问题,您可以先将条款收集到列表中,然后将or_应用于filter(...)

q = session.query(Item)
clauses = [Item.description.like('%{0}%'.format(k)) for k in search_keywords]
q = q.filter(or_(*clauses))

如果您觉得它更优雅,可以通过拨打AND而不是and_将其用于or_个案例。