Flask-SQLAlchemy'OR'查询具有可变数量的参数

时间:2014-08-22 20:26:32

标签: python flask sqlalchemy flask-sqlalchemy

我有一个高级搜索界面,它将key:value对发送到我的烧瓶应用程序。 关键是要搜索的表中的列,值是要比较的条件。

以下是项目的示例查询,其中k是Projects表中的'tags'列,v是要搜索的标记。

projects = Projects.query.filter(getattr(Projects, k).like('%{}%'.format(v)))

如果用户提交两个要搜索的标签,则v将是两个标签的列表。然后,我可以像这样查询数据库:

if len(v) == 2:
    v1, v2 = v[0], v[1]
    projects = Projects.query.filter(or_(
        getattr(Projects, k).like('%{}%'.format(v1)),
        getattr(Projects, k).like('%{}%'.format(v2)))
    )

有没有更好的方法来执行“OR”查询,其中标签的数量(在此示例中)是可变的?

如何编写代码以便它可以处理2个标签或10个标签?

1 个答案:

答案 0 :(得分:5)

您可以使用*扩展将任意数量的参数传递给or_

or_filters = [getattr(Projects, k).like('%{}%'.format(term)) for term in v]
projects = Projects.query.filter(or_(*or_filters))

请记住,在SQL查询中使用大量LIKE次查找通常效率低下。