Recursive Category Table in Python
While working with a project, the problem with the recursive category table being built came up. The table holds the parent_id of the category name and the result is a list with the id and the name of the category. The category name is prepended with spaces equivalent to the level of indentation.
model:
class AchievementCategory(DeclarativeBase): __tablename__ = 'achievement_categories' id = Column(mysql.MSBigInteger(20, unsigned = True), primary_key = True) parent_id = Column(mysql.MSBigInteger(20, unsigned = True), default = 0) name = Column(Unicode(80))
code:
def get_cats(n = 0, c_list = [], level = 0): sql = DBSession.query(AchievementCategory).filter_by(parent_id = n).order_by(AchievementCategory.name).all() for e in sql: c_list.append([e.id, level * " " + e.name, level]) get_cats(e.id, c_list, level+1) return c_list print get_cats()
Tags: category table, recursive