关于在Django中批量保存对象的问题

时间:2010-11-18 15:05:48

标签: django django-models save

我在Django的在线文档中没有看到关于这个主题的任何内容。

我正在尝试将对象列表保存到数据库,但我可以做的是遍历列表并在每个对象上调用save()。

Django几次点击数据库了吗?或者Django会做一次批量保存吗?

5 个答案:

答案 0 :(得分:35)

从Django 1.4开始,QuerySet对象上存在bulk_create()方法,允许在单个查询中插入对象列表。有关详细信息,请参阅:

答案 1 :(得分:10)

不幸的是,批量插入是Django 1.3及之前不直接支持的东西。如果要使用ORM,则必须在每个单独的对象上调用save()。如果它是一个大型列表并且性能是一个问题,您可以使用django.db.cursor在事务内手动INSERT项目,以显着加快进程。如果您有一个庞大的数据集,则需要开始查看特定于数据库引擎的方法,例如Postgres中的COPY FROM。

答案 2 :(得分:2)

这个问题也在How do I perform a batch insert in Django?中提到,它提供了一些让Django这样做的方法。

答案 3 :(得分:2)

来自Django 1.4存在bulk_create(),但是,总是如此。

您需要小心,使用bulk_create()它不会在内部调用实例save()方法。

正如django docs所说

  

不会调用模型的save()方法

所以,如果你重写了保存方法,(就我的情况而言)你不能使用bulk_create。

答案 4 :(得分:1)

This可能是一个很好的起点,但正如代码段的作者所说,它可能不是生产就绪的。