django之bulk_create

在 Django 中,批量创建对象可以显著提高性能,特别是在需要创建大量对象时。Django 提供了 bulk_create 方法来实现这一点。

假设的模型

首先,假设有一个简单的模型 Book,包含书名和作者字段。

python 复制代码
# models.py
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)

    def __str__(self):
        return self.title

批量创建对象

接下来使用 bulk_create 方法批量创建 Book 对象

python 复制代码
# views.py 或者在 Django shell 中
from myapp.models import Book

# 创建一个包含多个 Book 对象的列表
books = [
    Book(title='Book 1', author='Author 1'),
    Book(title='Book 2', author='Author 2'),
    Book(title='Book 3', author='Author 3'),
    # 可以继续添加更多的 Book 对象
]

# 使用 bulk_create 方法批量创建对象
Book.objects.bulk_create(books)

注意事项

  1. 性能bulk_create 方法在单个 SQL 查询中插入所有对象,这比逐个保存对象要快得多。
  2. 返回值bulk_create 方法不会返回创建的对象列表。如果你需要获取创建的对象,可以在创建后重新查询数据库。
  3. 限制:某些数据库(如 SQLite)对单个插入查询的大小有限制。如果你需要插入非常大量的数据,可能需要分批次进行。

分批次批量创建

如果需要插入非常大量的数据,可以分批次进行批量创建:

python 复制代码
# views.py 或者在 Django shell 中
from myapp.models import Book
from django.db import transaction

# 创建一个包含多个 Book 对象的列表
books = [
    Book(title='Book 1', author='Author 1'),
    Book(title='Book 2', author='Author 2'),
    Book(title='Book 3', author='Author 3'),
    # 可以继续添加更多的 Book 对象
]

# 定义每批次的大小
batch_size = 1000

# 分批次批量创建对象
for i in range(0, len(books), batch_size):
    with transaction.atomic():
        Book.objects.bulk_create(books[i:i + batch_size])

或者

python 复制代码
from myapp.models import Book
from django.db import transaction

# 创建一个包含多个 Book 对象的列表
books = [
    Book(title='Book 1', author='Author 1'),
    Book(title='Book 2', author='Author 2'),
    Book(title='Book 3', author='Author 3'),
    # 可以继续添加更多的 Book 对象
]

# 使用 bulk_create 方法批量创建对象,并指定 batch_size
with transaction.atomic():
    Book.objects.bulk_create(books, batch_size=1000)

通过这种方式,你可以确保所有的插入操作在一个事务中执行,从而保证数据的一致性。

相关推荐
Java水解11 小时前
Django实现接口token检测的实现方案
后端·django
飞Link11 小时前
【Django】Django 调用外部 Python 程序的完整指南
后端·python·django·sqlite
码界奇点13 小时前
基于Django与Vue.js的RBAC权限管理系统设计与实现
vue.js·python·车载系统·django·毕业设计·源代码管理
计算机学姐17 小时前
基于Python的智能点餐系统【2026最新】
开发语言·vue.js·后端·python·mysql·django·flask
计算机学姐1 天前
基于Python的在线考试系统【2026最新】
开发语言·vue.js·后端·python·mysql·django·flask
码界奇点2 天前
基于Django REST framework与Vue的前后端分离后台管理系统设计与实现
vue.js·后端·python·django·毕业设计·源代码管理
Q_Q5110082852 天前
python+springboot+django/flask基于深度学习的音乐推荐系统
spring boot·python·django·flask·node.js·php
Q_Q5110082852 天前
python+springboot+django/flask基于深度学习的淘宝用户购物可视化与行为预测系统
spring boot·python·django·flask·node.js·php
Q_Q5110082852 天前
python+django/flask+vue基于spark的西南天气数据的分析与应用系统
spring boot·python·spark·django·flask·node.js
Q_Q5110082852 天前
python+springboot+django/flask基于深度学习的旅游推荐系统
spring boot·python·django·flask·node.js·php