0
我在两个表/对象之间有多对多的关系:标记和内容。 Tag.content
是从标签到具有该标签的所有内容的关系。SQLAlchemy:选择相关的多对多元素的计数
现在我想知道分配给标签的内容对象的数量(对于所有标签,否则我只是简单地使用len()
)。下面的代码几乎工作:
cnt = db.func.count()
q = db.session.query(Tag, cnt) \
.outerjoin(Tag.content) \
.group_by(Tag) \
.order_by(cnt.desc())
但是,它绝不会返回一个零计数原因很明显 - 有每个标签至少一行都由于使用了LEFT JOIN
后。这是一个问题,因为我想要得到所有标签的正确计数 - 即0
如果标签是孤立的。
所以我想知道是否有办法做到这一点 - 显然不发送n + 1查询到数据库。纯SQL解决方案也可能没问题,通常将这样的解决方案映射到SA并不难。
.filter(Tag.content.any())
删除不正确计数的结果,但它会这样做,通过从结果集中删除行,这是不是我想要的。
GROUP BY是否也转换为不同? – Kristian
我只按标签分组。 – ThiefMaster