如何使用 Flask-Sqlalchemy query 出一个三层 one-to-many 结构的数据库

2014-08-19 07:03:23 +08:00
 Arthur0902
可能标题有点不清楚,详细解释如下:

一个数据库有三张表。一张表存贮主分类,第二张子分类,第三张存文章。顺序是一对多。即一个主分类对应多个子分类,一个子分类又对应多个文章。

想知道如何写Query语句,能够查询出一个主分类下的所有子分类,以及某个子分类下的所有文章。

比如在做导航栏的时候,希望能用一个数据结构查出所有主分类,以及各自的子分类。这样传递到模板里用for循环即可。

数据表的结构大概如下:

class MainLevel(db.Model):
__tablename__ = 'mainlevel'
"""主分类的数据模型"""
id = db.Column(db.Integer, primary_key=True)
# 显示的名称
name = db.Column(db.String(50))
# 英文名称
name_en = db.Column(db.String(50))
# url上的名称
slug = db.Column(db.String(50), unique=True)
# 主导航下拉菜单下的图片地址
image_url = db.Column(db.String(100))
# 显示顺序
show_order = db.Column(db.Integer)
# 创建日期
create_date = db.Column(db.DateTime)



sublevel = db.relationship('SubLevel', backref='mainlevel', lazy='dynamic')

def __repr__(self):
return '<名称:%s>' % self.name

class SubLevel(db.Model):
__tablename__ = 'sublevel'
"""子分类的数据类型"""
id = db.Column(db.Integer, primary_key=True)
# 显示的名称
name = db.Column(db.String(50))
# 英文名称
name_en = db.Column(db.String(50))
# url上的名称
slug = db.Column(db.String(50), unique=True)
# 显示顺序
show_order = db.Column(db.Integer)
# 创建日期
create_date = db.Column(db.DateTime)

# 与Main Level的关系
mainlevel_id = db.Column(db.Integer, db.ForeignKey('mainlevel.id'))

def __repr__(self):
return '<名称:%s>' % self.name

谢谢!
2882 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/128652

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX