2017-09-26 81 views
0

我想動態創建peewee中的where子句。我知道我需要使用表達式,但無法運行。這裏我的代碼:擴展peewee表達式拋出'表達式'對象不可迭代

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.extendextend以一個列表作爲參數,而append以單個項目爲參數。