django3文档,django笔记

  django3文档,django笔记

  学习笔记,仅供参考。

  本文通过目录表、关系映射、一对一映射语法,创建一对一的数据记录查询功能,给出了实例。

  数据表关联映射

  在关系数据库中,所有的数据通常不会放在同一个表中,这样会占用额外的内存空间。这时,我们将使用表关联来连接各种数据表。

  常见的表关联形式有三种:一对一映射(比如一个身份证对应一个人)、一对多映射(比如一个班可以有多个学生)、多对多映射(比如一个学生可以报多个课程,一个课程可以有多个学生学习)。

  一对一映射

  一一对应是指事物之间一一对应。

  语法

  #主类

  A级(型号。型号):

  .

  #依赖类

  B级(型号。型号):

  attribute=models . onetoonfield(a)

  示例(作家和作家的同伴类)#models.py

  从django.db导入模型

  类作者(模型。型号):

  编写器模型类

  名称=型号。CharField (writer ,max_length=50)

  班级伙伴(模特。型号):

  作家的同伴模型类

  名称=型号。CharField (partner ,max_length=50)

  作者=模特。OneToOneField(作者)

  #添加与编写器一对一的属性

  创建一对一的数据记录

  从书店导入模型

  author 1=models . author . objects . create(name=黄永祥)

  1=models . partner . objects . create(name=黄女士,author=author1)

  #与黄永祥有关的作家

  author 2=models . author . objects . create(name= Wang Jun )

  #在一对一的关系中,主类对象可以没有对应的从属类对象。

  询问

  在伙伴对象中,通过author属性找到对应的author对象;

  在Author对象中,通过partner属性找到对应的partner对象。

  正向查询可以直接通过关联属性查询来完成:

  #通过合作伙伴查找作者

  从书店导入模型

  partner=models . partner . objects . get(name=黄太太)

  print的partner(partner . name, is ,partner.author.name)是反向查询,反向引用属性是实例对象。引用类名(引用类名应为小写),例如,如果编写器的反向引用是编写器对象。伙伴,需要注意的是,反向引用不存在时会触发异常。

  #author可以通过author.partner找到合作伙伴,如果没有对应的合作伙伴,就会抛出异常。

  author 1=models . author . objects . get(name=黄永祥)

  Print(author1.name,的合作伙伴是,author1.partner.name)

  author 2=models . author . objects . get(name= Wang Jun )

  尝试:

  Print(author2.name,的合作伙伴是,author2.partner.name)

  除了:

  Print(author2.name,“还没有合作伙伴”)

  功能

  一对一映射主要是解决数据存储的问题。一个频繁加载的数据放在主表中,另一个不常用的数据放在另一个副表中。这样,在访问主表中的数据时,就不需要加载副表中的数据,从而提高了访问速度,节省了内存空间。比如书的目录和书名,往往是建在两个表里面,因为网站上经常会访问书名等信息,但是书的目录是不需要的。

  例如

  首先,我们在models.py中创建一个伙伴模型类,作为Author类的从属类,形成一对一的关系:

  班级伙伴(模特。型号):

  作家的同伴模型类

  名称=型号。CharField (name ,max_length=50)

  年龄=模特。IntegerField (age ,null=False,

  默认值=1)

  author=models . one toon field(author,on _ delete=models.cascade)记得进行迁移:

  f:\ my studio \ python studio \ goat bishop . project 01 \ Django \ my website _ db python manage . py make migrations

  “书店”的迁移:

  书店\迁移\0006_auto_20200621_2334.py

  -更改作者的字段年龄

  -创建模型合作伙伴

  f:\ my studio \ python studio \ goat bishop . project 01 \ Django \ my website _ db python manage . py migrate

  要执行的操作:

  应用所有迁移:管理、验证、书店、内容类型、会话

  运行迁移:

  应聘书店。0006_auto_20200621_2334.好需要注意的是,如果我们在一对一字段中没有加参数on _ delete=模型。级联,则在使用python manage.py makeigrations进行迁移时就会报错。如果我们加入这个参数,则在删除主表的数据时,从表中的数据也会随之删除。

  现在,打开姜戈壳牌公司创建记录:

  从书店导入模型

  作者1=模型Author.objects.create(name=黄永祥,年龄=40,邮箱=yxhuang@163.com’)

  合作伙伴1=模型Partner.objects.create(name=黄夫人,年龄=39,作者=作者1)

  #关联黄永祥作家

  作者2=模型Author.objects.create(name=王军,年龄=36,邮箱=王俊@ 163 . com’)再查看一下mywebdb数据库中书店_合作伙伴表和书店_作者表:

  MySQL select * from bookstore _ author;

  - - - -

   id 姓名年龄电子邮件

  - - - -

   1 山羊20 goatbishop@gamil.com

   2 小黄11 1033794241@qq.com

   5 小黑13 xiaohei@gmail.com

   6 小白19 xiaobai@gmail.com

   7 山羊哥28 biggoat@gmail.com

   8 黄永祥40 yxhuang@163.com

   9 王军36 wangjun@163.com

  - - - -

  一组七行(0.00秒)

  MySQL select * from book store _ partner;

  - - - -

   id 姓名年龄作者id

  - - - -

   1 黄夫人 39 8

  - - - -

  集合中的一行(0.00秒)我们看到书店_合作伙伴表中黄夫人的作者编号字段值为8,它对应着书店_作者表中的编号值8

  我们再做一些查询工作:

  #正向

  合作伙伴=模特Partner.objects.get(name=黄夫人)

  print(partner.name,的伴侣是,partner.author.name)

  #反向

  作者1=模型Author.objects.get(name=黄永祥)

  print(author1.name,的伴侣是,author1.partner.name)

  作者2=模型Author.objects.get(name=王军)

  尝试:

  print(author2.name,的伴侣是,author2.partner.name)

  除了:

  print(author2.name,还没有伴侣)输出:

  黄夫人的伴侣是黄永祥

  黄永祥的伴侣是黄夫人

  王军还没有伴侣

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: