例如,在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”搜索的最佳做法是什么?
答案 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_
个案例。