Flask框架從入門到精通之模型關係(十七)

知識點: 一、模型關係參照python

1、概況

在數據庫中,咱們知道數據關係大概有以下幾種:一對1、一對多、多對多、自關聯等。咱們模型已經描述過了一對多,那麼下面咱們在用模型把其它關係也寫出來。mysql

關係

  • 一對一模型 案例:一篇文章只對應一個內容
# 文章模型
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
id name
1 框架
2 模型
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

歡迎關注個人公衆號:sql

image
相關文章
相關標籤/搜索