【问题标题】:Question about batch save objects in Django关于Django中批量保存对象的问题
【发布时间】:2011-05-12 02:23:07
【问题描述】:

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

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

那么 Django 会多次访问数据库吗?或者Django会做一批保存吗?

【问题讨论】:

  • 也许值得更改接受的答案,因为 bulk_create() 在 django 1.4 及更高版本中可用

标签: django django-models save


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

【讨论】:

【解决方案3】:

从 Django 1.4 开始存在 bulk_create(),但是,总是但是。

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

正如 django 文档所说

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

因此,如果您要覆盖保存方法,(就像我的情况一样)您不能使用 bulk_create。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      This 可能是一个很好的起点,但正如代码 sn-p 的作者所说,它可能还没有准备好生产。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-01
        • 1970-01-01
        • 2022-10-24
        • 2010-10-14
        • 2011-08-29
        相关资源
        最近更新 更多