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)

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

相关推荐
源码之家17 小时前
计算机毕业设计:Pyhon健康数据分析系统 Django框架 数据分析 可视化 身体数据分析 大数据(建议收藏)✅
大数据·python·数据挖掘·数据分析·django·lstm·课程设计
vx_biyesheji000421 小时前
计算机毕业设计:Python医疗数据分析平台 Flask框架 数据分析 可视化 医疗大数据 用户画像(建议收藏)✅
大数据·python·深度学习·数据分析·django·flask·课程设计
源码之家1 天前
计算机毕业设计:Python医疗数据可视化系统 Flask框架 数据分析 可视化 医疗大数据 用户画像(建议收藏)✅
python·深度学习·信息可视化·数据分析·django·flask·课程设计
Wonderful U1 天前
【前后端】如何使用agent来实现django+vue的前后端开发
vue.js·django
QQ8057806511 天前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
凯瑟琳.奥古斯特3 天前
Django Flask FastAPI 三者对比
开发语言·python·django·flask·fastapi
Betelgeuse763 天前
Django 中间件 4 大钩子 & CBV vs FBV 对比实战
python·中间件·django
北冥有羽Victoria4 天前
Django中间件实战:FBV/CBV日志全兼容
数据库·vscode·后端·python·django·sqlite·开源
源码之家5 天前
计算机毕业设计:Python中药材数据可视化与智能分析平台 Django框架 中药数据分析 医药数据分析数据分析 可视化 爬虫 (建议收藏)✅
python·深度学习·信息可视化·数据分析·django·课程设计
q_35488851535 天前
计算机毕业设计:Python中药材天地网数据挖掘与可视化系统 Django框架 中药数据分析 医药数据分析数据分析 可视化 爬虫 (建议收藏)✅
python·数据挖掘·数据分析·django·flask·课程设计