首页 > 解决方案 > SQLAlchemy:是否可以在同一个查询中组合“like”和“in”

问题描述

我有以下 SQLAlchemy 查询工作

incomplete_list = ['a','b','c']

complete_units = []
for elem in incomplete_list:
    query = Table.query.filter(Table.name.like(elem))
    for row in query:
        complete_units.append(row.unit_number)

我想避免使用 for 循环多次查询数据库。是否可以组合“in”和“like”运算符,以便我只查询一次数据库?或者有没有更好的方法来做这个查询?谢谢

标签: pythonsqlalchemysql-likesql-in

解决方案


改编自这个答案

incomplete_list = ['a','b','c']
complete_units = []

clauses = [Table.name.like(elem) for elem in incomplete_list]
query = Table.query.filter(or_(*clauses))
complete_units = query.all()

严格来说,此执行路径的结果可能与您的示例代码不同,因为如果Table包含满足多个条件的行incomplete_list,您的示例代码将多次返回同一行,而此代码只会执行一次(我相信是需要的)。


推荐阅读