首页 > 其他 > 详细

ORM多表增删改查

时间:2020-02-24 10:08:36      阅读:52      评论:0      收藏:0      [点我收藏+]

一 创建多表

models.py里创建4张表:Author(作者)、AuthorDetail(作者详细信息)、Publish(出版社)、Book(书)

四张表关系为:

技术分享图片

 1)首先创建一对一关系。OneToOneField()

创建Author

class Author(models.Model):

name=models.CharField( max_length=32)
age=models.IntegerField()
authorDetail=models.OneToOneField(to="AuthorDetail",to_field="id",on_delete=models.CASCADE)

models.OneToOneField是创建一对一关系的关键字,to="AuthorDetail"表示和AuthorDetail表创建一对一关系。to_field="id"表示关联字段,不写默认为Id(主键)。on_delete=models.CASCADE表示级联删除。(注:to后面的表名和字段都是字符串形式)。创建一对一关系,生成authorDetail,这个为关联属性。通过AuthorAuthorDetail表中的内容就要通过这个关联属性。(生成一对一的表,会在关联的表生成字段:authorDetail_id

(2)创建AuthorDetail

class AuthorDetail(models.Model):        
    birthday=models.DateField(),
    telephone=models.CharField(max_length=32) ,                      
    addr=models.CharField( max_length=64)
        

 3)然后创建多对一关系。ForeignKey()

外键字段要加在多的一方,即Book表。

技术分享图片

  Book表和Publish通过ForeignKey连接起来,生成Publishs关联属性。

再建Publish表:

技术分享图片

 4)建立多对多关系ManyToManyField

Book表和Author具有多对多关系。可以在任何一张表加。选择在Book表加:

技术分享图片

 5)最后生成详细字段关系表

技术分享图片

 蓝色的只是类里面的关联属性,在表中没有这个字段,只有相应的id字段。

二 添加记录。

 利用djangoadmin.py文件添加记录。

 1)首先在admin.py配置注册字段:

 技术分享图片

 2)在终端里输入:

Python manage.py createsuperuser创建超级用户

3)在浏览器输入:http://127.0.0.1:8000/admin/登陆页面,和数据库同步,即可添加数据。

技术分享图片

  三 在视图函数中增删改查

 1.增加

A.一对一

方式一:(常用)           通过id方式

技术分享图片

 先找到AuthorDetail中的那条记录,并生成obj对象。然后再创建Author记录时,让authorDetail_id=obj.idAuthor表中有authorDetail_id字段的)

 方式二:

技术分享图片

 首先创建好一个new_author_detail对象。然后创建Author记录时通过authorDetail等于该对象,就建立两者一对一关系。(不需要再查找一遍了)

 B.一对多

 方式一:(常用)(id连接) 

技术分享图片

 同一对一增加一样。可以直接把Obj放在等式里。

方式二:(类属性连接)

技术分享图片

 C多对多

方式一(常用)

直接再Book表(关联表/有关联属性的)找到要添加的那条记录,然后调用Book的关联属性添加到指定的记录。 

技术分享图片

 可以添加多个。方式为*[3,6]。里面的数字是id

多对多(两张表的记录都已经存在,建立两者对应关系)

方式二:

技术分享图片

 先找到要添加的对象Book表的和Author表的。然后调用Book表的对象的author属性的add方法,添加Author表的对象。

 2.删除

一对一和一对多的删除和单表删除是一样的。但要考虑级联删除。

级联删除原则:

我和你关联,你不能随便删-----------》你删我也删(级联)

我可以随便删,我删了对你没影响

1)一对一

技术分享图片

  2是关联表中的内容,直接.deledte找到的记录,对被关联表没有影响。但1中删除了id2 的记录,则在关联表中和id2(即authorDetail_id=2)的记录也都删除了。(有关联id的那个值没了,这条id值对应的那条记录也没了)

2)一对多 

技术分享图片

  3)多对多

多对多删除就是删除第三张表的两者对应关系

技术分享图片

  add方法对应。通过类的关联属性增删。

set方法--------》先clear,add

技术分享图片

  3.更新

1)一对一

更新方法.update()前必须用filter()查找。不能用get().update()要用queryset对象。 

技术分享图片

  2)一对多

技术分享图片

  3)多对多

Set方法

  

ORM多表增删改查

原文:https://www.cnblogs.com/yq055783/p/12355463.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!