如何动态创建给出参数列表的where子句?

时间:2014-10-10 12:39:45

标签: python peewee

是否可以在给定列表的情况下向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))

1 个答案:

答案 0 :(得分:2)

您可以在Python 3.x中使用reducefunctools.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))
...