2017-09-26 4 views
0

peeweeでWhere-clauseを動的に作成したいと思います。私は表現を使う必要があることを学んだが、これを動かすことはできない。ここに私のコード:peewee式を拡張すると 'Expression'オブジェクトが反復可能ではありません

clauses = [ 
    (Docs.language_frst == 0), 
    (Docs.body_len <= max_body_len), 
    (Docs.body_len >= min_body_len) 
    ] 

    if len(aValid_ids_used): 
    clauses.extend((Docs.id.not_in(aValid_ids_used))) 

    docids = Docs.select(Docs.id).where(reduce(operator.and_, clauses)) 

限り、aValid_ids_usedが空である限り、コードは正常に動作します。 aValid_ids_usedはもはや空にされていないと私は拡張する条項を求めていたら、私はエラーを取得する:

Traceback (most recent call last): File "xyz.py", line 170, in <module> 
clauses.extend((Docs.id.not_in(aValid_ids_used))) 
TypeError: 'Expression' object is not iterable 

答えて

1

あなたがして拡張するためのリストを渡す必要があります。あなたは現在合格していますExpression

clauses.extend((Docs.id.not_in(aValid_ids_used),)) 

>>> c = [] 
>>> c.extend((2)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not iterable 
>>> c.extend((2,)) 
>>> c 
[2] 
1

はおそらくlist.appendではなくlist.extend使用します。 extendはリストとして引数をとり、appendは1つの項目をとります。

関連する問題