chi*_*aku 1 python sqlalchemy flask flask-sqlalchemy
我有一个高级搜索界面,它将key:value对发送到我的flask应用程序.关键是要搜索的表中的列,值是要比较的条件.
下面是项目的示例查询,其中k是Projects表中的'tags'列,v是要搜索的标记.
projects = Projects.query.filter(getattr(Projects, k).like('%{}%'.format(v)))
Run Code Online (Sandbox Code Playgroud)
如果用户提交两个要搜索的标记,则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)))
)
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来执行"OR"查询,其中标记的数量(在此示例中)是可变的?
如何编写代码以便它可以处理2个标签或10个标签?
您可以使用*扩展来传递任意数量的参数or_.
or_filters = [getattr(Projects, k).like('%{}%'.format(term)) for term in v]
projects = Projects.query.filter(or_(*or_filters))
Run Code Online (Sandbox Code Playgroud)
请记住,LIKE在SQL查询中使用大量查找通常效率低下.
| 归档时间: |
|
| 查看次数: |
2452 次 |
| 最近记录: |