簡體   English   中英

SQLalchemy運算符的動態查詢過濾器

[英]dynamic query filter with SQLalchemy operators

我有一個列表: 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有所不同,並且我以前不知道。 這就是為什么我想從scope_list動態管理過濾器。

在SQL Alchemy中,我想我應該這樣做:

session.query(my_table).filter(or_(and_(my_table.product==%s,mytable.release.in_(%s))) for element.split() in scope_list)

我才剛剛開始學習SQL Alchemy,我們將不勝感激。

無論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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM