在数据库中,我们知道数据关系大概有如下几种:一对一、一对多、多对多、自关联等。我们模型已经描述过了一对多,那么下面我们在用模型把其它关系也写出来。
关系
# 文章模型
class Article(db.Model):
# 表名
__tablename__ = 'tbl_article'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
title = db.Column(db.String(128), unique=True) # 名字
# 方便查找,数据并不存在的字段
content = db.relationship('Acontent', backref='article', uselist=False) #一对一需要把uselist设置为False
# 内容模型
class Acontent(db.Model):
# 表名
__tablename__ = 'tbl_acontent'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
content = db.Column(db.Text(4000)) # 名字
article_id = db.Column(db.Integer, db.ForeignKey('tbl_article.id'))
复制代码
tbl_article
id
title
1
Flask入门
2
Flask模型
tbl_acontent
id
content
article_id
1
Flask是轻量级框架
1
2
Flask是模型入门
2
# 分类模型
class Category(db.Model):
# 表名
__tablename__ = 'tbl_category'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.String(32), unique=True) # 名字
# 方便查找,数据并不存在的字段
article = db.relationship('Article', backref='category')
# 文章模型
class Article(db.Model):
# 表名
__tablename__ = 'tbl_article'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
title = db.Column(db.String(128), unique=True) # 名字
category_id = db.Column(db.Integer, db.ForeignKey('tbl_category.id')) # 分类id
# 方便查找,数据并不存在的字段
content = db.relationship('Acontent', backref='article', uselist=False) # 一对一需要把uselist设置为False
复制代码
tbl_category
tbl_article
id
title
category_id
1
Flask是轻量级框架
1
2
Flask是模型入门
2
3
Flask是模型查询
2
多对多模型 案例:一个标签对应很多文章,一篇文章也对应很多标签
# 辅助表
tbl_tags = db.Table('tbl_tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tbl_tag.id')),
db.Column('article_id', db.Integer, db.ForeignKey('tbl_article.id'))
)
# 标签模型
class Tag(db.Model):
# 表名
__tablename__ = 'tbl_tag'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.String(32), unique=True) # 名字
# 文章模型
class Article(db.Model):
# 表名
__tablename__ = 'tbl_article'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
title = db.Column(db.String(128), unique=True) # 名字
category_id = db.Column(db.Integer, db.ForeignKey('tbl_category.id')) # 分类id
# 方便查找,数据并不存在的字段
content = db.relationship('Acontent', backref='article', uselist=False) # 一对一需要把uselist设置为False
tags = db.relationship('Tag', secondary=tbl_tags, backref='articles')
复制代码
tbl_tag
id
name
1
python
2
后端
3
mysql
tbl_article
id
title
category_id
1
Flask是轻量级框架
1
2
Flask是模型入门
2
3
Flask是模型查询
2
tbl_tags
tag_id
article_id
1
1
1
1
2
1
2
2
# 地区模型
class Area(db.Model):
# 表名
__tablename__ = "tbl_area"
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.Text, nullable=False) # 地区名字
parent_id = db.Column(db.Integer, db.ForeignKey("tbl_area.id")) # 父评论id
# 方便查找,数据并不存在的字段
parent = db.relationship("Area", remote_side=[id]) # 自关联需要加remote_side
复制代码
id
name
parent_id
1
北京市
Null
2
黑龙江
Null
3
哈尔滨
2
4
南岗区
3
5
北京市
1
6
朝阳区
5
欢迎关注我的公众号: