按确切的 ID 列表而不是 "in_" ID 列表过滤

Filtering by exact list of IDs instead of "in_" list of IDs

ItemCondition是一对多的关系。我需要查询所有 完全 这个 Conditions 列表(没有子集,没有超集)。

下面的查询显然不好,因为发现 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()        

是否可以实现这样的查询结果? (没有 "manual" 消除所有 Item 之后当然不符合这个条件)

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,这可能不是最有效的,但它可能已经足够了。