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