我在Django的在线文档中没有看到关于此主题的任何内容。关于在Django中批量保存对象的问题
我想将对象列表保存到数据库,但我可以做的是循环访问列表并在每个对象上调用save()。
那么Django多次访问数据库?或者Django会做一个批量保存呢?
我在Django的在线文档中没有看到关于此主题的任何内容。关于在Django中批量保存对象的问题
我想将对象列表保存到数据库,但我可以做的是循环访问列表并在每个对象上调用save()。
那么Django多次访问数据库?或者Django会做一个批量保存呢?
不幸的是,批量插入是Django 1.3和之前不直接支持的东西。如果你想使用ORM,那么你必须在每个单独的对象上调用save()。如果它是一个很大的列表并且性能是一个问题,那么可以使用django.db.cursor在事务内部手动插入项目,以显着加快该过程。如果你有一个庞大的数据集,你需要开始查看数据库引擎特定的方法,比如Postgres中的COPY FROM。
中可用,这对于django 1.5是否仍然如此? – maazza 2013-04-17 10:45:35
否 - 请参阅下面的答案。从1.4开始,'bulk_create()'将处理高效的批量数据插入。 (https://docs.djangoproject.com/en/1.5/ref/models/querysets/#bulk-create) – 2013-04-24 02:44:17
复制From还是更好,然后bulk_create? – sharafjaffri 2014-01-08 07:44:52
This可能是一个很好的起点,但正如代码片段的作者所说,它可能不是生产准备好的。
这个问题也在How do I perform a batch insert in Django?中解决,它提供了一些方法来使Django做到这一点。
从Django 1.4起,在QuerySet对象上存在一个bulk_create()
方法,它允许在单个查询中插入对象列表。欲了解更多信息,请参见:
非常好!那么我应该升级到1.4。 – netvope 2012-05-24 19:42:08
bulk_create非常棒,但遗憾的是它不支持继承模型。任何想法来处理? – 2014-09-24 08:14:31
特别要注意,“如果模型的主键是一个AutoField,它不会检索并设置主键属性,除非数据库后端支持它(当前PostgreSQL)](https:// docs。 djangoproject.com/en/dev/ref/models/querysets/#bulk-create)”。 – Ninjakannon 2017-07-31 21:46:00
从Django的1.4存在bulk_create()
,但始终却。
您需要小心,使用bulk_create()
它不会在内部调用实例save()
方法。
由于Django文档说
模型的save()方法将不会被调用
所以,如果你是压倒一切的保存方法,(因为我的情况是)不能使用bulk_create。
也许值得改变接受的答案,现在bulk_create()在django 1.4中可用并且在 – DMTintner 2015-11-07 14:35:04