增删改

增加

表对象直接增加方式

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. Odoo POS会员积分当钱用如何设置?

    问题提问 设定积分规则1元积1分.而后每1积分可以当1分钱用,POS中能处理吗? 解决方案 1) 设定服务类型产品“积分”,其单价为0.01,收入科目为“销售费用” 2) 设定积分计划:积分规则是,订 ...

  2. 从零学习Fluter(三):Flutter的路由跳转以及state的生命周期

    今天继续研究Flutter,我是在flutter1.0发布后,才玩flutter的,发现在此之前,许多人已经先发制人,玩起了flutter,不知不觉中,我已经被别人摔在了起跑线上,玩过flutter后 ...

  3. 测者的测试技术手册:自动化单元工具EvoSuie的代码覆盖报告

    EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Yourkit的支持. ...

  4. MongoDB 在系统数据库local上无法创建用户的解决方法

    我们知道,MongoDB的Oplog (operations log)记录了用户的最近一段时间的操作(时间长短主要受设置的oplogSize和程序的写入更新量的影响).那么,如果其他部门(例如BI团队 ...

  5. 【原】Java学习笔记014 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 面向对象思想 // ...

  6. Python Docker 查看私有仓库镜像【转】

    文章来源:python Docker 查看私有仓库镜像 pip 安装: # 首先安装epel扩展源: yum -y install epel-release # 更新完成之后,就可安装pip: yum ...

  7. java类加载及类初始化

    1.前言 java是跨平台语言,主要是因为它的java虚拟机的存在,java有事编译语言,所以需要将编写的java文件编译成jvm可运用的class字节码文件.在java中一切皆对象.对于Java虚拟 ...

  8. 给Integer对象加锁的错误方式

    package com.thread.test; public class BadLockOnInteger implements Runnable { public static Integer i ...

  9. 最小化spring XML配置,Spring提供了4种自动装配策略。

    1.ByName自动装配:匹配属性的名字 在配置文件中的写法: <bean name="course" class="course类的全包名">&l ...

  10. Nvidia和Google的AI芯片战火蔓延至边缘端

    AI 的热潮还在持续,AI 的战火自然也在升级.英伟达作为这一波 AI 浪潮中最受关注的公司之一,在很大程度上影响着 AI 的战局.上周在美国举行的 GTC 2019 上,黄仁勋大篇幅介绍了英伟达在 ...