2015-05-06 2 views
0

Item имеет отношение «один ко многим» с Condition. Мне нужно запросить все Item s, которые имеют точно этот список Conditions (без подмножества, без надмножества).Фильтрация по точному списку идентификаторов вместо «in_» список идентификаторов

После запроса, очевидно, не очень хорошо, так как нашел Item.conditions может быть подмножеством item1.conditions:

condition_ids = [x.id for x in item1.conditions] 
    DBSession.query(Item).join(Condition, Item.conditions).filter(
       Item.sku_id==item1.sku_id).filter(Condition.id.in_(condition_ids)).all()   

ли можно достичь такого рода результатов запроса? (Без «ручной» устранение всех Item S потом, что не соответствует этому условию, конечно)

ответ

1
qry = DBSession.query(Item) 

# ensure that each condition is present using separate condition 
for cid in condition_ids: 
    qry = qry.filter(Item.conditions.any(Condition.id == cid)) 

# ensure that other skills are not present: 
qry = qry.filter(~Item.conditions.any(~Condition.id.in_(condition_ids))) 

Это не может быть наиболее эффективным, если у вас есть много condition_ids, но это может быть просто достаточно хорошо.

Смежные вопросы