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)

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

相关推荐
AC赳赳老秦9 小时前
测试工程师:OpenClaw自动化测试脚本生成,批量执行测试用例
大数据·linux·人工智能·python·django·测试用例·openclaw
我是无敌小恐龙1 天前
线下班第一课
python·考研·django·ai编程
Betelgeuse762 天前
告别传统 ModelForm:用 React 与 DRF 打造现代化项目管理表单
前端·react.js·django·前端框架
编程小风筝2 天前
就业信息推荐系统 Python+Django+Vue.js
vue.js·python·django
万粉变现经纪人3 天前
如何解决 pip install flash-attention 报错 需要 SM_80+(Ampere)架构 问题
python·架构·django·bug·virtualenv·pip·pygame
云和数据.ChenGuang3 天前
机器学习之方差和标准差计算
人工智能·python·机器学习·django·pygame·deepseek
开开心心就好3 天前
经典塔防游戏移植移动端随时畅玩
java·前端·科技·游戏·edge·django·pdf
小熊Coding4 天前
Windows 上安装 mysqlclient 时遇到了编译错误,核心原因是缺少 Microsoft Visual C++ 14.0 或更高版本 的编译环境。
c++·windows·python·microsoft·django·mysqlclient·bug记录
深兰科技4 天前
深兰科技与宝武集团旗下钢友汇达成国际市场合作,俄罗斯、巴西、阿根廷市场同步推进
人工智能·django·fastapi·pygame·httpx·视觉大模型·深兰科技
betazhou4 天前
django+postgresql创建第一个网站
python·postgresql·django