首页 > 其他分享 >Django框架之批量插入数据

Django框架之批量插入数据

时间:2024-04-08 09:59:12浏览次数:23  
标签:批量 create Django bulk 插入 objects 数据

一、项目需求

  • 浏览器中访问django后端某一条
  • url(如:127.0.0.1:8080/index/)
    • 实时朝数据库中生成一千条数据并将生成的数据查询出来
    • 并展示到前端页面

二、数据准备

创建模型表

class Book(models.Model):
    title = models.CharField(max_length=32)

三、单条插入数据

1、前端

{% for book_obj in page_queryset %}
	<p>{{ book_obj.title }}</p>
{% endfor %}

2、后端

def ab_pl(request):
    # 先给Book插入一千条数据
    for i in range (1000):
        models.Book.objects.create(title=f'第{i}本书')
        # 再将所有的数据查询并展示到前端页面
    book_queryset = models.Book.objects.all()
    # 最后将查询出来的数据传递给html页面
    return render(request, '06 ab_pl.html.html', locals())

3、小结

在上述代码书写完毕后启动django后端,浏览器访问,会发现浏览器会有一个明显的卡顿等待时间。

这不是你的浏览器有问题也不是网速有问题,而是后端再不停的操作数据库,耗时较长,大概需要等待一段时间之后才能正常看到刚刚插入的1000条数据,很明显这样操作数据库的效率太低

当频繁的走数据库操作的时候,效率会呈现指数型下降

那有没有一种方式是专门用来批量操作数据库的呢?答案是肯定的!

四、批量插入数据

在Django的ORM中,提供了bulk_create()方法来实现批量插入数据。这个方法可以在一次数据库查询中插入多行数据,从而提高插入效率。以下是bulk_create()方法的基本用法示例:

from myapp.models import MyModel

# 创建要插入的数据对象列表
objects = [
    MyModel(name='Alice', age=25),
    MyModel(name='Bob', age=30),
    MyModel(name='Charlie', age=35)
]

# 使用bulk_create()方法批量插入数据
MyModel.objects.bulk_create(objects)

在上面的示例中,假设MyModel是您的模型类,包含nameage字段。您可以创建一个包含要插入数据的对象列表,然后使用bulk_create()方法将这些对象一次性插入数据库。

需要注意的是,bulk_create()方法在执行时不会触发模型的信号、自动更新时间戳等操作,因此在使用时需要注意这些方面的处理。

上面示例优化:

def get_book_bulk(request):

    # 批量插入
    boo_list = []
    for i in range(1000):
        book_obj = models.Book.objects.create(title=f'第{i}本书')
        boo_list.append(book_obj)
    # 批量插入数据
    models.Book.objects.批量插入数据(boo_list)
    return render(request, 'books.html', locals())
  • 代码修改完毕之后其他地方无需改动,重启django项目浏览器重新访问
  • 你会立马发现数据量增大十倍的情况下页面出现的速度居然还比上面的版本要快上速度倍!!!
  • bulk_create方法是django orm特地提供给我们的方便批量操作数据库的方式,效率非常高!!!

标签:批量,create,Django,bulk,插入,objects,数据
From: https://www.cnblogs.com/xiao01/p/18120458

相关文章

  • 三种算法实例(二分查找算法、插入排序算法、贪心算法)
    当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。在正式探讨算法之前,有一个有趣的事实值得分享:你已经在不知不觉中学会了许多算法,并习惯将它们应用到日常生活中了。下面我将举......
  • Django框架之视图层
    一、三板斧的原理介绍1、HttpResponse在Django中,HttpResponse是一个类,用于构建HTTP响应并返回给客户端。当视图函数处理完请求后,需要返回一个响应时,就会使用HttpResponse对象。(1)创建HttpResponse对象fromdjango.httpimportHttpResponseresponse=HttpResponse(content="......
  • Django框架之模型层
    一、前期准备1、测试脚本当你只是想要测试Django中的某一个py文件内容,那么你可以不用书写前后端交互的形式,而是直接写一个测试脚本即可这内容其实就是最外部manage.py文件中的上面几句话脚本代码无论是写在应用下的tests.py文件还是自己新建文件,将内容写在新文件中,都会生效......
  • Django框架之Ajax基础
    一、JSON知识回顾1、什么是JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,通常用于在网络之间传输数据。它基于JavaScript的语法,但是独立于编程语言,因此几乎所有编程语言都支持解析和生成JSON数据。JSON数据采用键值对的形式来组织数据,其中键是字符串,值可以是......
  • LeetCode题练习与总结:插入区间--57
    一、题目描述示例 1:输入:intervals=[[1,3],[6,9]],newInterval=[2,5]输出:[[1,5],[6,9]]示例2:输入:intervals=[[1,2],[3,5],[6,7],[8,10],[12,16]],newInterval=[4,8]输出:[[1,2],[3,10],[12,16]]解释:这是因为新的区间[4,8]与[3,5],[6,7],[8,10] 重叠。......
  • 【22.0】Django框架之CBV添加装饰器的三种方式
    【一】引言给类视图函数添加装饰器需要借助第三方模块fromdjango.utils.decoratorsimportmethod_decorator【二】三种添加装饰器方式【1】给类方法加装饰器指名道姓的装--放在方法上面(1)路由path('login_view/',views.MyLogin.as_view()),(2)视图fromdjango.vi......
  • 【21.1】Django框架之会话Session补充
    【一】前言引入【1】HTTP特性之无状态因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的、独立的。通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户。对于静态网站,这可能不是个问题,而对于动态网站,尤其......
  • 【21.0】Django框架之Cookie和Session
    【一】Cookie与Session的发展史Cookie和Session是用来在Web应用程序中跟踪用户会话数据的两种常用技术。【1】Cookie的发展史1994年,网景通信公司推出了第一个浏览器Cookie技术。Cookie是存储在用户计算机上的小型文本文件,用于跟踪用户在网站上的活动。初始版本的Cookie只......
  • 【24.0】Django框架之csrf跨站请求
    【一】跨站请求伪造介绍【1】引入CSRF(Cross-SiteRequestForgery)跨站请求伪造是一种常见的网络攻击方式。攻击者通过诱导受害者访问恶意网站或点击恶意链接将恶意请求发送到目标网站上利用受害者在目标网站中已登录的身份来执行某些操作从而达到攻击的目的。【2】举......
  • 【23.0】Django框架之中间件引入
    【一】Django中间件介绍【1】什么是Django中间件Django中间件是一个轻量级、可重用的组件,用于处理Django请求和响应的过程。它提供了对请求和响应进行全局处理的机制,可以在请求达到视图之前进行预处理或在响应返回给客户端之前进行后处理。中间件是按照顺序依次执行的,每......