Python 如何在给定参数列表的情况下动态创建where子句?
在给定列表的情况下,是否可以向Peewee select语句动态添加过滤器?例如,而不是:Python 如何在给定参数列表的情况下动态创建where子句?,python,peewee,Python,Peewee,在给定列表的情况下,是否可以向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_PE
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))
您可以使用(在Python 3.x中):
使用生成器表达式:
base_list = [Base1, Base2, Base3]
Table.select().paginate(page,ENTRY_PER_PAGE).where(
reduce(oeprator.and_, (Table.Base == b for b in base_list))
)
如果需要表达更复杂的表达式,您也可以使用以下命令,而不是运算符和
(运算符和
):
啊,太好了!但问题是,运算符中的“”到底是做什么的?如果你的意思是(…for..in…
),那就是a.@dumby.Fat.Cat,Python中没有&
,|
操作符,但是和,或。哦,还有最后一个问题@falstru,最后一个例子,你有a,b,a来自哪里?@dumby.Fat.Cat,lambda
表达式是一种返回函数的表达式。请按照答案中的链接进行操作。(链接到reduce
,lambda
)
base_list = [Base1, Base2, Base3]
Table.select().paginate(page,ENTRY_PER_PAGE).where(
reduce(oeprator.and_, (Table.Base == b for b in base_list))
)
...
reduce(lambda a, b: a & b, (Table.Base == b for b in base_list))
...