在Django中,当你需要将大型数据集插入模型时,为了避免一次性加载所有数据到内存然后批量插入,可以使用bulk_create()
方法结合iterator()
来实现延迟提交
下面是一个使用bulk_create()
和iterator()
的例子:
Person
模型:from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
csv
模块读取CSV文件,并使用iterator()
方法迭代数据:import csv
from django.core.paginator import Paginator
from .models import Person
def read_large_csv(file_path):
with open(file_path, 'r') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
yield row
data_iterator = read_large_csv('large_file.csv')
bulk_create()
方法将数据批量插入到数据库,并且设置batch_size
参数来控制每次提交的数据量:batch_size = 1000 # 自定义批处理大小
for i, data_batch in enumerate(Paginator(data_iterator, batch_size)):
persons = []
for data in data_batch.object_list:
person = Person(first_name=data['first_name'], last_name=data['last_name'])
persons.append(person)
Person.objects.bulk_create(persons)
print(f'Batch {i + 1} inserted.')
这样,数据将分批插入到数据库,而不是一次性加载所有数据到内存中,从而提高了性能并减少了内存消耗。你可以根据需要调整batch_size
的值来控制每批提交的数据量。
领取专属 10元无门槛券
手把手带您无忧上云