是否可以动态地将过滤器添加到给定列表的 Peewee select 语句中?例如代替:
Table.select().paginate(page,ENTRY_PER_PAGE).where((Table.Base==Base1) & (Table.Base==Base2) & ...)
我想传入一个列表
,它会按该列表
中的内容进行过滤:
list = [Base1, Base2, Base3...]
Table.select().paginate(page,ENTRY_PER_PAGE).where((Table.Base==contentfromList))
最佳答案
您可以使用reduce
(functools.reduce
在 Python 3.x 中):
>>> 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))
...
关于python - 如何在给定参数列表的情况下动态创建 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26299666/