【django学习-16】数据表操作之增、删、改

  • 增(create , save)
from app01.models import *

#create方式一:   Author.objects.create(name='Alvin')
#create方式二(推荐):   Author.objects.create(**{"name":"alex"})
#save方式一:     author=Author(name="alvin")
                 author.save()
#save方式二:     author=Author()
                 author.name="alvin"
                 author.save()

#一对多(ForeignKey):
方式一: 由于绑定一对多的字段,比如publish,存到数据库中的字段名叫publish_id,所以我们可以直接给这个字段设定对应值:
Book.objects.create(title='python',publisher_id=1,publication_date='2022-09-14',price=99)
#publisher_id=1这里的1是指为该book对象绑定了Publisher表中id=2的行对象

方式二:
 <1> 先获取要绑定的Publisher对象:
 pub_obj=Publisher(name='河大出版社',address='保定',city='保定',state_province='北',country='China',website='http://www.hbu.com')
 OR  pub_obj=Publisher.objects.get(id=1)

 <2>将 publisher_id=2 改为  publisher=pub_obj

#多对多,ManyToMany写在book表中
-----正向查询------
author1=Author.objects.get(id=1)
author2=Author.objects.filter(name='gmm')[0]
book=Book.objects.get(id=1)
book.authors.add(author1,author2)
book.author.remove(author1,author2)  #移除

-----反向查询------
author=models.Author.objects.filter(id=1)[0]
books = models.Book.objects.filter(id__gt=1)
author.book_set.add(*books)
author.book_set.remove(*books)
  • 改(update和save)
方式一:
publisher=Publisher.objects.get(id =3)
publisher.name = '广东出版社'
publisher.save()

方式二:
Publisher.objects.filter(id =3).update(name='XX出版社')

注意点:
<1> 第二种方式修改不能用get的原因是:update是QuerySet对象的方法,get返回的是一个model对象,它没有update方法,而filter返回的是一个QuerySet对象(filter里面的条件可能有多个条件符合,比如name='alvin',可能有两个name='alvin'的行数据)。
<2>save()方法,这个方法会更新一行里的所有列。 而某些情况下,我们只需要更新行里的某几列。
  • 删除
>>> Book.objects.filter(id=4).delete()
(2, {'blog.Book_authors': 1, 'blog.Book': 1})
我们表面上删除了一条信息,实际却删除了二条,因为我们删除的这本书在Book_authors表中有一条相关信息,这种删除方式就是django默认的级联删除。

由https://www.cnblogs.com/xwltest/p/16694602.html可知,on_delete用于设置删除模式,不同的删除模式会影响数据删除的结果,说明如下:
CASCADE:表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除;
PROTECT:如果删除的数据设有外键字段并且关联其它数据表的数据,就提示删除失败;
SET_NULL:执行数据删除并且其它数据表的外键字段设为NULL,外键字段必须将属性设为:True,否则提示异常;
SET_DEFAULT:执行数据删除并且其它数据表的外键字段设为默认值;
SET:执行数据删除并且其它数据表的外键字段关联其它数据;
DO_NOTHING:不做任何处理。
posted @ 2022-09-16 21:43  Tony_xiao  阅读(81)  评论(0编辑  收藏  举报