摘要:
在資料庫中,我們知道資料關係大概有如下幾種:一對一、一對多、多對多、自關聯等。我們模型已經描述過了一對多,那麼下面我們在用模型把其它關係也寫出來。
關係
一對一模型 案例:一篇文章只對應一個內容
# 文章模型
class Article(db.Model):
...
在資料庫中,我們知道資料關係大概有如下幾種:一對一、一對多、多對多、自關聯等。我們模型已經描述過了一對多,那麼下面我們在用模型把其它關係也寫出來。
關係
# 文章模型
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 |
歡迎關注我的公眾號: