迹忆客 专注技术分享

当前位置:主页 > 学无止境 >

Django 中的批量更新

作者:迹忆客 最近更新:2023/02/27 浏览次数:

在 Django 中,默认情况下,每个模型都有一个对象管理器。这个管理器可以做很多事情,比如获取模型实例、过滤模型实例、删除模型实例。我们甚至可以通过继承 Django 提供的基础管理器来创建我们自己的管理器。

现在,我们应用的每个查询,例如使用 get() 函数检索单个模型实例或使用 filter() 方法过滤实例,都会命中数据库一次。这意味着,如果我们有如下 5 个 get() 语句,数据库将被单独查询 5 次。

person = Person.objects.get(id = 1)
person = Person.objects.get(id = 2)
person = Person.objects.get(id = 3)
person = Person.objects.get(id = 4)
person = Person.objects.get(id = 5)

这是一种低效的方法,因为我们正在为单个任务单独访问数据库。如果我们必须为某些模型查询多个实例或更新多个实例,这种方法会显着降低我们的应用程序的速度。

为了解决这个问题,Django 有一个内置函数,通常可以用于在一个查询中更新多个实例。

bulk_update 方法具有三个参数,即 objsfieldsbatch_size

考虑一个例子。假设我们有一个 Person 模型,我们必须使用 bulk_update() 方法将所有人员的年龄增加 1。我们会做以下事情。

models.py 中:

from django.db import models

class Person(models.Model):
    username = models.CharField(max_length = 200, unique = True)
    firstName = models.CharField(max_length = 200)
    middleName = models.CharField(max_length = 200)
    lastName = models.CharField(max_length = 200)
    age = models.IntegerField(default = 0)

views.py 中:

people = Person.objects.all()

for person in people:
    person.age += 1

Person.objects.bulk_update(people, update_fields = ['age']) 

此操作将在单个查询中更新所有人员的年龄,这是非常有效的。

bulk_update() 方法非常好,但并非所有的闪光点都是金子。这种方法有一些缺点。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 中的第一类函数

发布时间:2023/04/25 浏览次数:113 分类:Python

第一类函数是被语言视为对象或变量的函数。 我们可以将它们分配给变量或将它们作为对象传递给其他函数。Python 支持第一类函数的功能。

Python 函数参数类型

发布时间:2023/04/25 浏览次数:140 分类:Python

在这篇 Python 文章中,我们将学习 Python 中使用的函数参数类型。 我们还将学习如何编写不带参数的 Python 函数。

Python 生成器中的 send 函数

发布时间:2023/04/25 浏览次数:111 分类:Python

本教程将介绍如何在 Python 中使用生成器的 send() 函数。我们可以创建一个像迭代器一样运行的函数,并且可以通过 Python 生成器函数在 for 循环中使用。

Python Functools 偏函数

发布时间:2023/04/25 浏览次数:80 分类:Python

本文介绍了我们如何使用分部函数,该函数随 functools 库一起提供,并附有示例。 这显示了调用时如何传递属性和部分函数。

Python main() 函数中的参数

发布时间:2023/04/25 浏览次数:157 分类:Python

在本教程结束时,我们应该了解Python 中在 main() 中使用参数是否是一种好的做法。

Python 中的内置 identity 函数

发布时间:2023/04/25 浏览次数:88 分类:Python

identity 函数只是一个返回其参数的函数。 当我们定义一个恒等函数并赋值时,它会返回该值。在本教程结束时,我们将了解 Python 是否具有内置的 identity 函数。

在 Python 中拟合阶跃函数

发布时间:2023/04/25 浏览次数:177 分类:Python

阶跃函数是带有看起来像一系列步骤的图形的方法。 它们由一系列中间有间隔的水平线段组成,也可以称为阶梯函数。本文给出了阶跃函数的简单演示。

在 Python 中创建双向链表

发布时间:2023/04/25 浏览次数:54 分类:Python

双向链表是指由称为节点的顺序链接的记录集组成的链接数据结构。 每个节点包含一个前一个指针、一个下一个指针和一个数据字段。

将 Python 类对象序列化为 JSON

发布时间:2023/04/25 浏览次数:152 分类:Python

本教程介绍序列化过程。 它还说明了我们如何使用 toJSON() 方法使 JSON 类可序列化,并包装 JSON 以转储到其类中。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便