ORM操作mysql数据库多表的增删改查
发布时间:2020-12-15 07:29:17 所属栏目:Java 来源:网络整理
导读:多表增加 # 一对一 #查询要被关联的属相对象 au_obj = models.AuthorDetail.objects.get(id=4) models.Author.objects.create( name='海狗',age=59,#方式一:直接通过数据库的字段名au_id增加,一对一时,数据必须是没有关联过的,否则会报错 au_id=4,#方式二:通
多表增加# 一对一 #查询要被关联的属相对象 au_obj = models.AuthorDetail.objects.get(id=4) models.Author.objects.create( name='海狗',age=59,#方式一:直接通过数据库的字段名au_id增加,一对一时,数据必须是没有关联过的,否则会报错 au_id=4,#方式二:通过属性models类的属性添加,首先要查出要关联的对象,然后通过属性关联,一对一数据必须未关联 au=au_obj,) #一对多 pub_obj = models.Publish.objects.get(id=3) models.Book.objects.create( title='xx2',price=13,publishDate='2011-11-12',如果关键字为数据库字段名称,那么值为关联数据的值 publishs_id=3,#类属性作为关键字时,值为model对象 publishs=pub_obj,) #多对多 多对多添加数据是在中间表中添加关联,只能通过属性操作 #查找要关联的作者 ziwen = models.Author.objects.get(id=3) haigou = models.Author.objects.get(id=5) new_obj = models.Book.objects.create( title='海狗产后护理第二部',price=0.5,publishDate='2019-09-29',publishs_id=2,) #方式一*: new_obj.authors.add(3,5) #方式二: new_obj.authors.add(*[3,5]) # 用的最多,#方式三: new_obj.authors.add(ziwen,haigou) 多表删除#一对一 #删除被关联表的数据,级联删除,会自动删除关联表中的数据,如果没有设置级联删除,就不会删除关联表中的数据 models.AuthorDetail.objects.filter(id=3).delete() #通过外键表删除,只会删除自己的数据,被关联表中的数据不会删除 models.Author.objects.filter(id=3).delete() #一对多(和一对一的一样) models.Publish.objects.filter(id=3).delete() models.Book.objects.filter(id=4).delete() #多对多 #多表删除只能通过删除中间表的关联信息,来消除关联,#获取要消除关联的数据,(书籍) book_obj = models.Book.objects.get(id=2) #删除于书籍book_obj相关的作者id为1的作者 book_obj.authors.remove(1) #删除 #清除所有于书籍book_obj相关的关联数据 book_obj.authors.clear() # 清除 #重新设置于书籍book_obj相关的关联作者信息 book_obj.authors.set(['1','5']) # 先清除再添加,相当于修改 多表修改#orm表中的关联是关联id字段,所以修改字段数据,不会影响关联关系,就是单表修改数据 ret = models.Publish.objects.get(id=2) models.Book.objects.filter(id=5).update( #通过属性来修改字段值 title='华丽丽',publishs=ret,#通过数据库字段来修改值 publishs_id=1,) #多对多修改,是修改中间表的数据,来设置关联关系,通过set设置 #重新设置于书籍book_obj相关的关联作者信息 book_obj.authors.set(['1',相当于修改 多表查询#一对一查询: # 关系属性写在表1,关联到表2,那么通过表1的数据去找表2的数据,叫做正向查询,返过来就是反向查询 #正向查询: obj = models.Author.objects.filter(name='王洋').first() #正向查询,通过属性查找,会自动查找被关联表中的数据字段,对象.属性 ph = obj.au.telephone # 反向查询会自动查找关联表中的数据字段,对象.属性对象.小写的表名 obj = models.AuthorDetail.objects.filter(telephone=120).first() ret = obj.author.name print(ret) #一对多: #正向查询: obj = models.Book.objects.filter(title='海狗的怂逼人生').first() ret = obj.publishs.name #反向查询: #一堆多的情况下,反向查询是从关联表的数据查找被关联表中的数据,可能是多条数据,obj = models.Publish.objects.filter(name='24期出版社').first() #表名后面加__set就是可能查找到多条数据时使用,通过all的方式获取所有查询到的结果 ret = obj.book_set.all() #查询到的是QuerySet对象 #通过foe循环,查看每个结果的字段值 for i in ret: print(i.title) #多对多: #正向查询:建表时的关系属性写在那个表中,通过这个表去查询,就是正向查询 obj = models.Book.objects.filter(title='海狗的怂逼人生').first() ret = obj.authors.all() #反向查询: 查询一个作者写了多少书 obj = models.Author.objects.filter(name='海狗').first() ret = obj.book_set.all() for i in ret: print(i.publishs.name) print(i.title) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |