Django框架之批量插入数据

一、项目需求

  • 浏览器中访问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特地提供给我们的方便批量操作数据库的方式,效率非常高!!!
posted @ 2024-04-08 09:45  Xiao0101  阅读(291)  评论(0)    收藏  举报