django学习09--数据的添加与更新(QuerySet)

本文详细介绍了Django中如何通过ORM框架实现数据库操作,包括Shell模式下新增、更新、去重和批量创建数据的方法,如实例化-赋值-save、create、get_or_create、update_or_create和bulk_create等。
摘要由CSDN通过智能技术生成

学习导读
Django对数据库的数据进行增、删、改操作是借助内置ORM框架所提供的API方法实现的,简单来说,ORM框架的数据操作API是在QuerySet类里面定义的,然后由开发者自定义的模型对象调用QuerySet类,从而实现数据操作。

Shell模式新增数据

Django提供了多种数据新增方法,开发者可以根据实际情况以及个人使用习惯选择某一种新增方式。为了更好地演示数据库的增、删、改操作,在项目babies使用Shell模式(启动命令行和执行脚本)进行讲述,该模式方便开发人员开发和调试程序。
在PyCharm的Terminal下开启Shell模式,输入

python manage.py shell

指令即可,如下图所示。
在这里插入图片描述
如果输入指令后不是截图所示,可以安装ipython
利用PyCharm自带的功能安装:

在这里插入图片描述

使用实例化 - 赋值 - save新增数据

在Shell模式下,若想对数据表新增数据,则可输入类似以下代码实现
在这里插入图片描述


from index.models import PersonInfo

  • 第一行指令作用是导入模型,也就是在index应用的models文件里定义的类。
p = PersonInfo()
  • 实例化一个对象,在之后的操作中使用。
 p.name = '鲁汶'
 p.age = 18
p.hireDate = '2001-01-01'
  • p为前面的实例化对象,.后的name,age,hireDate皆为相关数据表中的字段,如果点后跟上没有的字段则会报错
p.save()
p.id,p.name,p.age,p.hireDate
  • p.save()既调用数据保存函数,将刚才新增的数据保存,保存前需注意是否漏掉了一些非空的字段。
  • p.id,p.name,p.age,p.hireDate会查看刚才实例化对象相关字段的值。

基础操作流程:导入模型 —— 实例化 —— 属性赋值 —— 调用save()方法保存数据

使用create新增数据

输入以下指令添加新数据
在这里插入图片描述

查看数据表是否添加成功
在这里插入图片描述

使用字典与create新增数据

输入以下指令新增数据
在这里插入图片描述
查看数据添加结果
在这里插入图片描述

使用实例化赋值 - save新增数据

在这里插入图片描述
查看数据表
在这里插入图片描述

使用get_or_create新增无重数据

  • 执行数据新增时,为了保证数据的有效性,我们需要对数据进行去重判断,确保数据不会重复新增。以往的方案都是对数据表进行查询操作,如果查询的数据不存在,就执行数据新增操作。为了简化这一过程,Django提供了get_or_create方法。

  • 只要有一个模型字段的值与数据表的数据不相同(除主键之外),就会执行数据新增操作。

  • 如果每个模型字段的值与数据表的某行数据完全相同,就不执行数据新增,而是返回这行数据的数据对象,比如对上述的字典d重复执行get_or_create,第一次是执行数据新增(若执行结果显示为True,则代表数据新增),第二次是返回数据表已有的数据信息(若执行结果显示为False,则数据表已存在数据,不再执行数据新增)在这里插入图片描述

因之前新增数据中含有李玉所以添加失败(false)。

  • 添加非重数据。
    在这里插入图片描述

使用update_or_create新增或更新数据

update_or_create是根据字典d的内容查找数据表的数据,如果能找到相匹配的数据,就执行数据修改,修改内容以字典格式传递给参数defaults即可;如果在数据表找不到匹配的数据,就将字典d的数据新增到数据表里。

  • 新增数据
    在这里插入图片描述

在这里插入图片描述

  • 数据修改
    在这里插入图片描述
    在这里插入图片描述

使用bulk_create批处理添加数据

在使用bulk_create之前,数据类型为模型Types的实例化对象,并且在实例化过程中设置每个字段的值,最后将所有实例化对象放置在列表或元组里,以参数的形式传递给bulk_create,从而实现数据的批量新增操作。
在这里插入图片描述
在这里插入图片描述

退出Shell模式

在这里插入图片描述

Shell模式更新数据

使用get - 修改 - save方式

更新数据的步骤与数据新增的步骤大致相同,唯一的区别在于数据对象来自数据表,因此需要执行一次数据查询,查询结果以对象的形式表示,并将对象的属性进行赋值处理,代码如下:
在这里插入图片描述
在这里插入图片描述

使用filter - update方式

批量更新一条或多条数据,查询方法使用filter,filter以列表格式返回,查询结果可能是一条或多条数据.
在这里插入图片描述
在这里插入图片描述

使用dict - filter - update方式

  • 更新数据以字典格式表示
    在这里插入图片描述
    在这里插入图片描述

使用update方式实现全表更新

不使用查询方法,默认对全表的数据进行更新
在这里插入图片描述
在这里插入图片描述

使用内置F方法实现数据的自增或自减

将age字段原有的数据自增加5,自增或自减的字段必须为数字类型
在这里插入图片描述
在这里插入图片描述

使用bulk_update方式批量更新数据

在Django 2.2或以上版本新增了数据批量更新方法bulk_update,它的使用与批量新增方法bulk_create相似。
在这里插入图片描述
此处仅为示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值