I haven\'t seen any thing on this topic in Django\'s online documents.
I am trying to save a list of objects to database, but what I can do is loop through the list
Unfortunately, batch inserts are something that Django 1.3 and prior do not directly support. If you want to use the ORM, then you do have to call save() on each individual object. If it's a large list and performance is an issue, you can use django.db.cursor to INSERT the items manually inside a transaction to dramatically speed the process up. If you have a huge dataset, you need to start looking at Database engine specific methods, like COPY FROM in Postgres.
This might be a good starting point, but as the author of the code snippet says, it might not be production ready.
From Django 1.4 exists bulk_create()
, but, always but.
You need to be careful, using bulk_create()
it wont call instance save()
method internally.
As django docs says
The model’s save() method will not be called
So, if you are overriding save method, (as my case was) you can't use bulk_create.
This question is also addressed in How do I perform a batch insert in Django?, which provides some ways to make Django do this.
As of Django 1.4, there exists a bulk_create()
method on the QuerySet object, which allows for inserting a list of objects in a single query. For more info, see: