2014-02-19 50 views
2

我有一個自引用sqlalchemy模型。這很簡單,它是一個帖子的表格,每個帖子可以是對另一個帖子的回覆。沒有深度限制。sqlalchemy count後裔

class Post(db.Model): 
    post_id = db.Column(db.Integer, primary_key=True) 
    parent_id = db.Column(db.Integer, db.ForeignKey('post.post_id') 
    [...] 
    replies = db.relationship('Post') 

我需要一種方法來計算回覆帖子的數量。儘可能深。所以回覆到答覆的答覆等算作答覆..

任何幫助,將不勝感激

回答

2

你在這裏有什麼基本上是使用adjacency list存儲在tree

雖然您想要使用a relatively simple recursive function可以完成,但效率非常低,因爲您需要多次查詢數據庫才能獲取每個帖子的子項。

存儲這種類型的數據的另一種稍微複雜的方式稱爲修改先序樹遍歷(MPTT)。它更加高效,因爲您可以在單個查詢中從任意樹中獲取所需的數據 - 甚至可以統計回覆的數量而無需獲取任何實際的回覆數據。

你可以找到一個很好的鄰接列表與MPTT on this article概述。

如果你不想自己實現這個,對於SQLAlchemy尤其可以使用SQLAlchemy-ORM-tree