Question about batch save objects in Django

前端 未结 5 957
一向
一向 2020-12-14 15:47

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

相关标签:
5条回答
  • 2020-12-14 15:51

    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.

    0 讨论(0)
  • 2020-12-14 15:51

    This might be a good starting point, but as the author of the code snippet says, it might not be production ready.

    0 讨论(0)
  • 2020-12-14 16:02

    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.

    0 讨论(0)
  • 2020-12-14 16:08

    This question is also addressed in How do I perform a batch insert in Django?, which provides some ways to make Django do this.

    0 讨论(0)
  • 2020-12-14 16:10

    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:

    • Django documentation for bulk_create
    • Django 1.4 release notes
    • The ticket that implemented this feature
    0 讨论(0)
提交回复
热议问题