ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

17.-关系映射

2022-01-12 12:03:54  阅读:210  来源: 互联网

标签:.- 17 author name 映射 外键 查询 book 属性


一、什么是关系映射 在关系型数据库中,通常不会把所有数据都放同一张表中,不易于扩张,常见关系映射有 1.一对一映射 如:一个身份证对应一个人 2.一对多映射 如:一个班级对应多个学生 3.多对多映射 如:一个学生可以报多个课程,一个课程可以有多个学生     二、一对一 语法:OneToOneField(类名,on_delete=xxx) 示例: class A(model.Model): ...   clss B(model.Model): # 字段1指定要关联的模型类(设置外键指向对方),字段2表示要级联删除的信息 属性 = models.OneToOneField(A,on_delete=xxx) ps:属性名建议为关联模型类的小写   常用on_delete-级联删除   1.models.CASCADE:级联删除,Django模拟sql约束on delete cascade的行为,并删除包含ForeignKey的对象   2.models.PROTECT 抛出ProtectedError 以阻止被引用对象的删除,等同于mysql默认的restrict   3.SET_NULL 设置ForeignKey null,需要指定null=True   4.SET_DEFAULT 将ForeignKey设置为其默认值,必须设置ForeignKey的默认值   一对一创建数据 #无外键的模型类[Author] author1 = Author.objects.create(name='王先生')     #有外键的模型类[Wife] wife1 = Wife.objects.create(name='王夫人',author=author1).  #拿外键属性绑定,必须指定对应的对象   #关联王老师   obj wife1 = Wife.objects.create(name='王夫人',author_id=1) #关联王老师对应主键值 拿外键字段绑定,绑定对应的字段值   正向查询:直接通过外键属性查询,则称为正向查询 wife = wife.objects.get(name = ‘王夫人’) print(wife.name ,’对应的是‘wife.author.name)   反向查询:没有外键属性的一方可以调用反向属性查询到关联的另一方 反向关联属性为 实例对象.引用类名(小写)-当反向引用不存在时,则会触发异常 author1 = Author.objects.get(name='王老师') author1.wife.name         三、一对多映射 一对多是表示现实事物间存在的一对多的对应关系 例如一个学校有多个班级,一个班级有多个学生,一个出版社可以出版多本图书 一对多需要明确出具体角色,在多表上设置外键   语法:当一个A类对象可以关联多个B类对象时 class A (model.Model): ... class B(model.Model): 属性= models.Foreignkey(‘一’的模型类,on_delete = xxx)     四、一对多创建数据 先创建【一】再创建【多】   五、一对多-查询数据 1.正向查询【通过Book查询Publisher】 通过外键属性查询即可   2.反向查询 反向属性- 模型类名_set       六、多对多映射 多对多表达对象之间多对多复杂关系,如每个人都有不同的学校,每个学校有不同的学生 mysql中创建多对多需要依赖第三张表来实现 Django中无需手动创建第三张表,Django会自动完成   语法:在关联的两个类中的任意一个类中,增加: 属性= models.ManyToManyField(MyModel)     示例:一个作者可以出版多本图书,一本图书可以被多个作者联名编写   七、多对多创建数据 方案1 先创建author再关联book 方案2 先创建book 再关联author   八、多对多-查询数据 正向查询 有多对多属性的对象 查另一方 通过Book查询对应的所有的Author 此时多对多属性等同于objects book.authors.all() -> 获取book对应的所有的author的信息 book.authors.fillter(age__gt=80) ->获取book对应的作者中年龄大于80岁的作者的信息   反向查询 通过author查询对应的所有的book 利用反向属性book_set author.book_set.all() author.book_set.filter()  

标签:.-,17,author,name,映射,外键,查询,book,属性
来源: https://www.cnblogs.com/Mickey-7/p/15791957.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有