带SQLalchemy运算符的动态查询筛选器

2024-10-01 07:47:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表:scope_list = ['prd1 rls1', ' prd1 rls1 rls3 rls2']

我想创建一个基于scope_list的过滤器,在SQL中如下所示:

(product=prd1 AND `release` in (rls1)) OR (product=prd1 AND release in (rls1 ,rls3, rls2))

知道scope_list中的值的数目是不同的,而且我以前不知道。这就是为什么我希望从scope_list动态管理过滤器。在

在SQL炼金术中,我想我应该这样做:

^{pr2}$

我刚开始学习SQL炼金术,任何帮助都将不胜感激。在


Tags: orandin过滤器列表sqlreleaseproduct
1条回答
网友
1楼 · 发布于 2024-10-01 07:47:15

or_and_都可以接受数量可变的位置参数,因此如果您构建一个列表,则可以使用or_(*or_args)将其作为位置参数传入。在

# First I split each term in the scope list.
scope_list = [term.split() for term in scope_list]
# Then the query is built.
or_args = [and_(
    my_table.product == scope[0], 
    my_table.release.in_(scope[1:])) for scope in scope_list]
results = session.query(my_table).filter(or_(*or_args)).all()

相关问题 更多 >