python 树结构 sqlalchemy_如何从SQLalchemy mod创建json树结构
我試圖用Flask創(chuàng)建一個webservice,我的webservice需要返回一個json編碼的樹結(jié)構(gòu),它包含屬于一個概要文件的所有活動。在
我的模型:class Activity(db.Model):
__tablename__ = 'activity'
id = db.Column(db.Integer, primary_key=True)
profile_id = db.Column(db.String, db.ForeignKey('profile.id'), nullable=False, index=True)
parent_id = db.Column(db.Integer, db.ForeignKey('activity.id'), index=True)
name = db.Column(db.String)
parent = db.relationship('Activiteit', remote_side=[id], backref='children')
class Profile(db.Model):
__tablename__ = 'profile'
id = db.Column(db.Integer, primary_key=True)
profile_name = db.Column(db.String(64))
active = db.Column(db.Boolean, nullable=False)
activities = db.relationship('Activity', backref="profile", lazy='dynamic')
employees = db.relationship('Employee', backref="profile", lazy='dynamic')
我需要以下結(jié)構(gòu):
^{pr2}$
我嘗試創(chuàng)建嵌套的dict和dict列表,但是每次我都被卡住了。以1級元素結(jié)尾的3級元素或只返回2級的樹。在
經(jīng)過一番搜索后,我發(fā)現(xiàn)我需要創(chuàng)建一個隊(duì)列,其中包含一個名稱和一個子列表的節(jié)點(diǎn),然后將這些節(jié)點(diǎn)添加到樹中。在
我用以下函數(shù)創(chuàng)建了隊(duì)列:def get(self, profile_id):
profile = models.Profile.query.get(profile_id)
queue = {}
for activity in profile.activities:
queue[activity.name]= [c.name for c in activity.children]
現(xiàn)在我不知道該怎么做,也不知道我走的路是否正確。任何幫助都將不勝感激
編輯
基于Codegeek's答案,我創(chuàng)建以下內(nèi)容:def get(self, profile_id):
activities = models.Activity.query.filter_by(profile_id=profile_id).all()
tree = {}
for level1 in activities:
if level1.parent_id is None:
tree[level1.name] = {'id': level1.id}
for level2 in level1.children:
tree[level1.name][level2.name] = {'id': level2.id}
for level3 in level2.children:
tree[level1.name][level2.name][level3.name] = {'id': level3.id}
return tree
總結(jié)
以上是生活随笔為你收集整理的python 树结构 sqlalchemy_如何从SQLalchemy mod创建json树结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android led灯框架_LED面板
- 下一篇: python中bs4库_python系统