我在Django的在线文档中没有看到关于这个主题的任何内容。
我正在尝试将对象列表保存到数据库,但我可以做的是遍历列表并在每个对象上调用save()。
Django几次点击数据库了吗?或者Django会做一次批量保存吗?
答案 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可能是一个很好的起点,但正如代码段的作者所说,它可能不是生产就绪的。