Flask-关系映射

2019-05-09  本文已影响0人  遇明不散

关系映射

一对多
# 在"多"实体中增加外键
外键列名 = db.Column(db.Integer,db.ForeignKey('主表.主键'))

# 在"一"实体中增加反向引用关系
属性名 = db.relationship('多的实体类名',关系选项)
属性名 = db.relationship('关联的实体类',backref='属性名',lazy='dynamic')
# backref : 在关系的另一个模型中添加反向引用
# lazy : 指定如何加载相关记录
#     select : 首次访问时加载
#     immediate : 源对象加载后立马加载关联数据
#     subquery : 立即加载,但使用子查询
#     noload : 永不加载
#     dynamic : 不加载记录,但提供加载记录的查询
# uselist : 如果设置为False,则不使用列表,使用标量
# secondary : 指定多对多关系中关联表的名字
一对一
在数据库中的体现
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)
多对多
实现

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

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')
)
上一篇下一篇

猜你喜欢

热点阅读