美文网首页
Flask-如何理解创建数据模型中外键关联

Flask-如何理解创建数据模型中外键关联

作者: 金鱼座 | 来源:发表于2019-12-25 10:25 被阅读0次

大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油!

之前学习flask创建数据模型的时候,经常会遇到relationship,外键关联, backref等字眼,由于对这方面知识不是特别熟悉, 所以极大的加深了理解难度, 虽然网上也有相关的表关联的案例,但是对于理解方面没有做过多的说明, 在此,通过学习按照自己的理解进行总结,也希望自己有所加深理解,通过也可以给跟我一样脑袋回路长的朋友一点方向

模型创建
对于日常Flask建表,都是通过建立相应的模型类,进行表操作,见eg:

class User(db.Model):
    """用户表"""

    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), nullable=False)

上面就是一个普通的见表操作, tablename是表示当前表名称,id, name为表字段,至于Integer, String则是对应的属性
对于这个大家很好理解

外键关联
可是我们经常看到的别人使用的外键关联是如何在模型类中体现的呢?

class Role(db.Model):
    __tablename__ = 'role'
     id = db.Column(db.Integer, primary_key=True)
     name = db.Column(db.String(32), nullable=False) # 角色
     users = db.relationship("User", backref='role')
      

class User(db.Model):
    __tablename__ = "user"
   ...
   role_id = db.Column(db.Integer, db.ForeignKey("role.id"))

对于一般的关联, 可以通过如上所示中的ForeignKey和relationship来进行处理
那么这两个如何方便理解呢?

  1. ForeignKey
    外键,表示当前的字段绑定了其他表中的某一个字段,上面为绑定“role.id”, 建立了外键关系

  2. relationship
    首先它不是一个字段,这个大家必须要明白, 当我们执行db.create的时候, role中的users并不会被记录到数据库字段中,在这个地方,我的个人理解是可以把他当作一个方法对象,可以让Role的实例化对象进行调用
    users = db.relationship("User", backref='role')
    上面这句,我们就可以这样理解, Role实例化一个role对象后,
    如何它想了解这个角色下有那些人,那么就可以通过role.users进行调用
    如果User想了解具体的这个人的role角色信息,那么就可以user.role来进行调用(此处可能有人会比较奇怪,为什么不是user.role_id, 这个调用本身没有错,确实可以理解为查看这个user下的角色,但是如果我们想了解角色的具体信息,那么按照正常操作下,还需要操作一下Role进行一下query查询,通过Role.id = user.role_id, 但是这样就等于是两次查询,而relationship的作用就包含了backref,通过反射可以让user实例直接backref调用“role”来直接获取对应的值)

总的来说, relationship这个聚合了两个功能

  1. 通过“User”, 可以直接让Role实例直接获取所有的关联的User的数据实例
  2. 通过backref, 可以让User反射获取到这个user实力所关联的Role中的指定role_id的数据实例

相关文章

  • Flask-如何理解创建数据模型中外键关联

    大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油! 之...

  • CoreData可视化创建及初始化(一)

    1.创建数据模型 想要使用CoreData,第一部是创建数据模型,它描述了数据的结构和关联关系等。可以理解为数据库...

  • sqlalchemy外键关联

    创建外键 关联查询 执行结果:

  • ORM 关联关系

    参看手册文档 关联关系 可以 创建外键或不创建外键 假设存在 users 表 id(主键) -> phones 表...

  • 创建私有库常见git命令

    利用cocoapods一键创建私有库 创建之后关联远程仓库 查看远程分支 关联本地分支和远程分支git branc...

  • 数据仓库快速入门教程5-数据建模

    数据建模是为要存储在数据库中的数据创建数据模型的过程。 该数据模型是概念表示 数据对象 不同数据对象之间的关联 规...

  • gorm源码2 tag映射

    参考 理解reflect 通过reflect获取tag值 gorm外键使用 gorm指定外键和关联外键 目的 分析...

  • MYSQL数据表建立外键

    MYSQL数据表建立外键 MySQL创建关联表可以理解为是两个表之间有个外键关系,但这两个表必须满足三个条件 1....

  • mysql 多表关联创建外键

    逻辑外键是数据库体现不出来的。物理外键是数据库知道的 一、多表关联-外键: 代码1: Foreign前面不写东西,...

  • Flask学习(四)

    这次主要整理有关数据表关联的内容还有数据模型里面的一对多 创建两张表,文章的author_id关联到用户表的id字...

网友评论

      本文标题:Flask-如何理解创建数据模型中外键关联

      本文链接:https://www.haomeiwen.com/subject/usiiyctx.html