Flask-ORM总结

数据表实体之间的关系总结:


特点:表与表的三张关系都是通过设置关键得到解决。
关系:

    1.存在的关系: 

                一对多
                一对一(例如:常见还是较少,因为可以放在一张表中)
                多对多(本质仍然是一对多,多表是中间表,在中间表中有其他表的多条记录)


                
    2.一对多关系:


        存在的问题:如何将两张表关联起来?
        解决方案:在多表中添加一个外键,参考一表的主键。(为什么不在一表中添加外键引用多表:如何这样这个字段需要存储多个信息,不符合数据库的设计规范)


        
    3.一对一关系:


        存在的问题:如何将两张表关联起来?
        解决方案:在一张表中添加一个外键,引用另一张表的主键,并将该外键设置成唯一约束

 


    4.多对多关系:


        存在的问题:如何将两张表关联起来?
        解决方案:创建第三张表,设置两个外键,分别参考两张表。
        特点:多对多的表本质上仍然是一对多,多表是中间表,一表是另外的两张表
    
    


在Flask中的体现(ORM模型)


    ORM模型本质上仍然遵循上述原则和解决方案,但是提出了反向引用:
    反向引用:在不添加外键的表中添加反向引用:
        db.relationship('',backref='',lazy='dynamic')

        
    ORM模型一对多的解决方案:

 


        1.在多表中添加外键,在一表中添加反向引用。
        外键:cid = db.ForenKey('teacher.id')
        


    ORM模型一对一的解决方案:


        特点关键字:uselist=Flase
        1.在任意一张表中添加外键,并设置外键唯一约束,在另一张表中添加反向引用属性
        2.在反向引用属性中将lazy='dynamic'换成uselist=Flase
    


    ORM模型多对多的解决方案:

 


        特点关键字:secondary,db.backref()
        1.创建第三张表来维护另外两张表的关系
        2.在创建的第三张表中添加外键参考另外两张表,
        3.在任意一张表中添加另一张表的反向引用属性
        
  

     
    注意点:


        1.设置外键的时候是db.ForenKey('表名.主键名称')
        2.设置关联属性的时候是db.relationship('类名',backref='当前表名',lazy='dynamic')
            例如在Course中添加以下字段:
            teachers = db.relationship('Teacher', backref='course', lazy='dynamic')
        3.处理多对多的关系的时候:
            因为需要关联到中间表,所以需要指明第三张表的表名,需要增加一个参数:secondary='中间表表名'
            因为反向引用属性也是多个数据,所以得说明这个多数据的延迟加载模式
            courses = db.relationship("Course", backref=db.backref("students",lazy='dynamic'), secondary="table_stu_cur")
        4.在一对多,多对多的反向引用属性中都是复数,但是一对一是单数,所以需要uselist=Flase属性
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值