python创建树_python – 从SQLalchemy中的自引用表创建树

看看http://sqlamp.angri.ru/index.html

UPD:对于adjacency_list.py声明示例

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base(metadata=metadata)

class TreeNode(Base):

__tablename__ = 'tree'

id = Column(Integer, primary_key=True)

parent_id = Column(Integer, ForeignKey('tree.id'))

name = Column(String(50), nullable=False)

children = relationship('TreeNode',

# cascade deletions

cascade="all",

# many to one + adjacency list - remote_side

# is required to reference the 'remote'

# column in the join condition.

backref=backref("parent", remote_side='TreeNode.id'),

# children will be represented as a dictionary

# on the "name" attribute.

collection_class=attribute_mapped_collection('name'),

)

def __init__(self, name, parent=None):

self.name = name

self.parent = parent

def append(self, nodename):

self.children[nodename] = TreeNode(nodename, parent=self)

def __repr__(self):

return "TreeNode(name=%r, id=%r, parent_id=%r)" % (

self.name,

self.id,

self.parent_id

)

修复递归

def get_tree(base_page, dest_dict):

dest_dict = { 'title': base_page.title, 'content': base_page.content }

children = base_page.children

if children:

dest_dict['children'] = {}

for child in children:

get_tree(child, dest_dict)

else:

return

使用查询在示例中从db的递归获取数据:

# 4 level deep

node = session.query(TreeNode).\n options(joinedload_all("children", "children",

"children", "children")).\n filter(TreeNode.name=="rootnode").\n first()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值