Django 1.4でbulk create

以前djangoでbulk insertするにはどうするかってエントリを書きましたが、django 1.4からbulk_createメソッドが用意されましたので、そちらの方法でも試してみました。
dbはmysqlMySQL-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というキーワード引数を指定できるようになるようです。