0

私はリストを持っています:scope_list = ['prd1 rls1', ' prd1 rls1 rls3 rls2']

scope_listSQL では次のようになることに基づいてフィルターを作成したいと思います。

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

の値の数は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 を学び始めたばかりです。どんな助けでも大歓迎です。

4

1 に答える 1

7

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()
于 2013-07-02T23:39:51.483 に答える