mysql表的relationship"/>
mysql表的relationship
数据表关联关系映射 Relationship Map
在关系型数据库中,通常不会把所有数据都放在同一张表中,这样做会额外占用内存空间,
在关系列数据库中通常用表关联来解决数据库。
用的表关联方式有三种:
一对一映射
如: 一个身份证对应一个人
一对多映射
如: 一个班级可以有多个学生
多对多映射
如: 一个学生可以报多个课程,一个课程可以有多个学生学习
一一对一映射
一对一是表示现实事物间存在的一对一的对应关系。
如:一个家庭只有一个户主,一个男人有一个妻子,一个人有一个唯一的指纹信息等
1.语法:
在关联的两个类中的任何一个类中:classA(model.Model):
...classB(model.Model):
属性= models.OneToOneField(A)
2.用法
(1)创建作家和作家妻子类
#file : xxxxxxxx/models.py
from django.db importmodelsclassAuthor(models.Model):'''作家模型类'''name= models.CharField('作家', max_length=50)classWife(models.Model):'''作家妻子模型类'''name= models.CharField("妻子", max_length=50)
author= models.OneToOneField(Author) #增加一对一属性
(2)查询
在 Wife 对象中,通过 author 属性找到对应的author对象
在 Author 对象中,通过 wife 属性找到对应的wife对象
(3)创始一对一的数据记录
from . importmodels
author1= models.Author.objects.create(name='王老师')
wife1= models.Wife.objects.create(name='王夫人', author=author1) #关联王老师
author2 = models.Author.objects.create(name='张老师') #一对一可以没有对应的数据
(4)一对一数据的相互获取
1.正向查询
直接通过关联属性查询即可
#通过 wife 找 author
from . importmodels
wife= models.Wife.objects.get(name='王夫人')print(wife.name, '的老公是', wife.author.name)
2.反向查询
通过反向引用属性查询
反向引用属性为实例对象,引用类名(小写),如作家的反向引用为作家对象.wife
当反向引用不存在时,则会触发异常
#通过 author.wif
更多推荐
mysql表的relationship
发布评论