美文网首页
Flask-关系映射

Flask-关系映射

作者: 遇明不散 | 来源:发表于2019-05-09 21:59 被阅读0次

    关系映射

    一对多
    • 在"多"表中增加外键关联,引用自"一"表中主键
    • 在"一"表实现关联属性以及反向引用
    # 在"多"实体中增加外键
    外键列名 = db.Column(db.Integer,db.ForeignKey('主表.主键'))
    
    # 在"一"实体中增加反向引用关系
    属性名 = db.relationship('多的实体类名',关系选项)
    属性名 = db.relationship('关联的实体类',backref='属性名',lazy='dynamic')
    # backref : 在关系的另一个模型中添加反向引用
    # lazy : 指定如何加载相关记录
    #     select : 首次访问时加载
    #     immediate : 源对象加载后立马加载关联数据
    #     subquery : 立即加载,但使用子查询
    #     noload : 永不加载
    #     dynamic : 不加载记录,但提供加载记录的查询
    # uselist : 如果设置为False,则不使用列表,使用标量
    # secondary : 指定多对多关系中关联表的名字
    
    一对一
    • A表中的一条记录只能与B表中的一条记录关联
    • B表中的一条记录只能与A表中的一条记录关联
    在数据库中的体现
    • 在任何一个表(实体)中实现外键关联
    • 在另一个表(实体)中实现关联属性以及反向引用
    class Wife(db.Model):
        ... ...
        teacher_id = db.Column(db.Integer,db.ForeignKey('teacher.id'))
    
    class Teacher(db.Model):
        ... ...
        wife = db.relationship('Wife',backref='teacher',lazy='dynamic',uselist=False)
    
    多对多
    • A表中的一条数据可以与B表中的任意多条数据关联
    • B表中的一条数据可以与A表中的任意多条数据关联
    实现

    使用第三张表来关联(并不需要实体类)

    • 创建第三张表
    student_course = db.Table(
            'student_course'  # 在数据库中的表名
            db.Column('id',db.Integer,primary_key=True) # 该表的主键
            db.Column('student_id',db.Integer,db.ForeignKey('student.id')),
            db.Column('course_id',db.Integer,db.ForeignKey('course.id'))
    )
    
    • 在任何一个实体中实现关联属性以及反向引用
    class Student(db.Model):
        courses = db.relationship(
        'Course',
        secondary='student_course',
        lazy='dynamic',
        backref=db.backref('students',lazy='dynamic')
    )
    

    相关文章

      网友评论

          本文标题:Flask-关系映射

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