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
案例。
例如,在 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
案例。