Django 1.4でbulk create
以前djangoでbulk insertするにはどうするかってエントリを書きましたが、django 1.4からbulk_createメソッドが用意されましたので、そちらの方法でも試してみました。
dbはmysqlでMySQL-pythonを使ってます。
こういうモデルの場合
from django.db import models class Book(models.Model): name = models.CharField(max_length=255) price = models.IntegerField() published = models.DateTimeField() featured = models.BooleanField()
こうなります
Book.objects.bulk_create([ Book(name="Python プロフェッショナルプログラミング", price=2940,published=datetime.strptime("2012/3/26", "%Y/%m/%d"), featured=True), Book(name="エキスパートPythonプログラミング", price=3780, published=datetime.strptime("2010/5/28", "%Y/%m/%d"), featured=True), Book(name="Clean Coder プロフェッショナルプログラマへの道", price=2100, published=datetime.strptime("2012/1/27", "%Y/%m/%d"), featured=True) ])
発行されたSQLを見てみるとこんな感じでちゃんとbulk insertしてます
15 Query SET NAMES utf8 15 Query set autocommit=0 15 Query SET SQL_AUTO_IS_NULL = 0 15 Query INSERT INTO `apps_book` (`name`, `price`, `published`, `featured`) VALUES ('Python プロフェッショナルプログラミング', 2940, '2012-03-26 05:00:00', 1), ('エキスパートPythonプログラミング', 3780, '2010-05-28 05:00:00', 1), ('Clean Coder プロフェッショナルプログラマへの道', 2100, '2012-01-27 06:00:00', 1) 15 Query commit
bulk_createは1.5からはbatch_sizeというキーワード引数を指定できるようになるようです。