是否可以在给定列表的情况下向Peewee select语句动态添加过滤器?例如,而不是:
Table.select().paginate(page,ENTRY_PER_PAGE).where((Table.Base==Base1) & (Table.Base==Base2) & ...)
我想传入,说list
,它会根据list
中的内容进行过滤:
list = [Base1, Base2, Base3...]
Table.select().paginate(page,ENTRY_PER_PAGE).where((Table.Base==contentfromList))
答案 0 :(得分:2)
您可以在Python 3.x中使用reduce
(functools.reduce
):
>>> import operator
>>> reduce(operator.mul, [2, 3, 5])
30
>>> 2 * 3 * 5
30
使用生成器表达式:
base_list = [Base1, Base2, Base3]
Table.select().paginate(page,ENTRY_PER_PAGE).where(
reduce(oeprator.and_, (Table.Base == b for b in base_list))
)
而不是operator.and_
(operator.__and__
),如果您需要表达更复杂的表达式,您还可以使用lambda
:
...
reduce(lambda a, b: a & b, (Table.Base == b for b in base_list))
...