sqlalchemy 搜索多个(未知数量)关键字

sqlalchemy searching for multiple ( unknown mumber) keywords

例如,在 SQLAlchemy 中,我想搜索关键字 "foo"、"bar",可能但不一定要在我的项目 class,所以我建立了一个这样的关键字列表: ["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" 搜索多个(不定数量的)关键字的最佳做法是什么?

您的代码已经很优雅了,我认为您无法对其进行显着改进。

为了解决 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_ 而不是 or_ 来将它用于 AND 案例。