增删改

增加

表对象直接增加方式

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="",publish=pub_obj)

含有一对多,一对一字段,在知道关联字段的值前提下也可以直接带值

models.Book.objects.create(title="追风筝的人",publishDdata="2015-5-8",price="",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="",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="", 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:不用查,直接把数据都清空

Django ORM 操作2 增删改的更多相关文章

  1. django -- ORM实现图书增删改查

    表结构设计 上篇我们实现了出版社的增删改查,出版社数据表有两个字段id和name,那图书的表结构怎么设计呢?图书也要有一个主键id,还要有一个名称title,是哪个出版社的,要有个字段press和Pr ...

  2. django -- ORM实现出版社增删改查

    前戏 我们来完成一个图书管理系统的增删改查 表结构设计 1. 出版社 id   name 2. 作者 id  name 3. 书 id  title  出版社_id 4. 作者_书_关系表 id  书 ...

  3. django -- ORM实现作者增删改查

    前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...

  4. Django ORM记录的增删改查结合web端

    模版语法分配变量 在views.py文件中定义一个视图函数show_data: def show_data(request): # 定义一个字典 并将它展示在前端HTML文件 user_dic = { ...

  5. 10.Django数据库操作(增删改)

    插入数据 命令:create 或者 save create用法:ModelName.objects.create(itemName="itemValue") save用法:mode ...

  6. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

  7. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  8. [oldboy-django][2深入django]ORM操作

    推荐学习博客:http://www.cnblogs.com/wupeiqi/articles/6216618.html 需求: 汇总django orm操作,代替原生mysql语句来操作数据库:里面内 ...

  9. 利用Django提供的ModelForm增删改数据

    上一篇我们写了Django基于类如何增删改数据的方法,方法虽然简单,但新手可能对其原理不是很清楚,那么我们这次就用Django提供的ModelForm方法来实现增删改数据,这是一种基于现有模型的增删改 ...

随机推荐

  1. MockJS和Easy Mock使用

    之前做mock数据一直用的json-server,今天同事给我推荐了很好用的工具:Easy Mock,我看完之后是下图的状态 很得劲啊,感觉人生已经达到了高潮 既能伪造接口,又能根据既定的规则生成对应 ...

  2. 在android studio中配置运行时签名

    做项目的时候,有时需要用到第三方接口,而基本第三方接口都是要求我们要先进行签名.结果每次调试都得手动进行签名一次,实在麻烦.所以android studio提供了一种在运行的时候自动进行签名的方法,在 ...

  3. 【公众号系列】两分钟学会SAP F1技巧

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]两分钟学会SAP F1技巧   写 ...

  4. C#常用的网络组件

    常用的网络组件 using System.Net;//为多种网络协议提供统一和简单的编程接口 using System.Net.Mail;//为简单邮件传输协议的服务器提供E-mail发送的类 usi ...

  5. Sql Server 获取本周周一

    SELECT DATEADD(Day,(@i+1)-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate())

  6. 文件比较命令(comp)

    comp命令: // 描述: 逐字节比较两个文件或文件集的内容. 如果在没有参数的情况下使用,comp会提示你输入要比较的文件. // 语法: comp [<Data1>] [<Da ...

  7. C语言----int (*p)[4] ---思考总结

    a+1  跳4个int (*a)+1 跳一个int

  8. About Pull Strings 英语走后门议论文

    About pull strings Author : Pleiades_Antares 1. From ancient times to the present, the "going b ...

  9. 【导航】Python常用资源(从新手到大牛)

    [博客导航] [Python相关] 个人网站/博客/学习平台 中国大学MOOC :高校课程网上公开课学习平台,<Python语言程序设计>是我的入门课. Python123平台  :跟中国 ...

  10. C#基础知识之静态和非静态

    项目中静态和非静态常被用到,什么时候需要用静态的,什么时候需要使用非静态,以及他们的区别是什么? 一.概述 静态和非静态的不同地方,就是静态从程序一启动就会一直占用内存,而非静态只有在实例化的时候才会 ...