Django ORM 操作2 增删改
增删改
增加
表对象直接增加方式
Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80) Frank_obj.save()
create 增加方式
单表增加 直接带值即可
models.Student.objects.create(name ="海燕",course="python",birth="1995-5-9",fenshu=88)
含有一对多,一对一字段的添加要传入对应对象
ps:create 方法的返回值为被创建的对象
pub_obj = models.Publish.objects.filter(name="人民出版社")[0] print(pub_obj) models.Book.objects.create(title = "简爱",publishDdata="2000-6-6",price="222",publish=pub_obj)
含有一对多,一对一字段,在知道关联字段的值前提下也可以直接带值
models.Book.objects.create(title="追风筝的人",publishDdata="2015-5-8",price="111",publish_id=1)
add 方式
含有 多对多 字段时,依旧是要传入对象,用 add 添加绑定关系
# 先创建一本书: pub_obj=models.Publish.objects.filter(name="万能出版社").first() book_obj = models.Book.objects.create(title="醉玲珑",publishDdata="2015-4-10",price="222",publish=pub_obj)
# #通过作者的名字django默认找到id haiyan_obj = models.Author.objects.filter(name="haiyan")[0] egon_obj = models.Author.objects.filter(name="egon")[0] xiaoxiao_obj = models.Author.objects.filter(name="xiaoxiao")[0]
# 绑定多对多的关系、 book_obj.authorlist.add(haiyan_obj, egon_obj, xiaoxiao_obj)
含有 多对多 字段,add 支持传入序列然后打散的方式绑定
pub_obj = models.Publish.objects.filter(name="万能出版社").first() book_obj = models.Book.objects.create(title="醉玲珑", publishDdata="2015-4-10", price="222", publish=pub_obj) authers = models.Author.objects.all()
# 绑定多对多关系 book_obj.authorlist.add(*authers)
update_or_create 方式
有的话更新,没有的话就创建
UserToken.objects.update_or_create(user=user_obj,defaults={"token":token})
bulk_create() 方式
Django model中数据批量导入
常规方法,影响性能
for i in resultlist: p = Account(name=i) p.save()
批量方法,更加方便
querysetlist=[] for i in resultlist: querysetlist.append(Account(name=i)) Account.objects.bulk_create(querysetlist)
修改
对象修改
对象直接 对象.属性 赋值修改,修改后需要 save()
book_obj = models.Book.objects.first() book_obj.title = "lalal" book_obj.save()
queryset 对象 update 修改
queryset 对象使用 update(属性="值")方法更改,不需要 save()
ps:update 返回值为受影响的行数
book_obj = models.Book.objects.filter(id=1) book_obj.update(title="keke") print(book_obj.values("title")[0]) # {'title': 'keke'}
多对多字段修改,set 方法 修改管理字段
book_obj = models.Book.objects.first()
book_obj.authors.set([2, 3])
删除
delete 方法
删除方法就是 delete(),它运行时立即删除对象而不返回任何值。
ps: delete方法删除是具有关联性的,默认会全部删除,可以在管理字段通过 on_delete 属性定制
# 删除数据 models.Student.objects.filter(nid=id).delete()
删除可以一次性删除多条记录
Entry.objects.filter(pub_date__year=2005).delete()
remove 和 clean 方法
remove 和 clean 方法仅使用于在多对多字段中解除关系所用
# 解除多对多的关系(remove) book_obj=models.Book.objects.filter(title="醉玲珑").last() # 找到书对象 authers=models.Author.objects.filter(id__lt=3) # 找到符合条件的作者对象 book_obj.authorlist.remove(*authers) # 因为清除的是多条,得加个*
# 清除关系方法(clear) book_obj= models.Book.objects.filter(title="红楼梦") for book_obj_item in book_obj: # 把所有红楼梦的都给清空了 book_obj_item.authorlist.clear()
区别:
remove:得吧要清除的数据筛选出来,然后移除
clear:不用查,直接把数据都清空
本文来自博客园,作者:羊驼之歌,转载请注明原文链接:https://www.cnblogs.com/shijieli/p/10349540.html