Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Django中批量保存对象的问题_Django_Django Models_Save - Fatal编程技术网

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

关于Django中批量保存对象的问题,django,django-models,save,Django,Django Models,Save,我在Django的在线文档中没有看到任何关于这个主题的东西 我试图将对象列表保存到数据库中,但我能做的是循环遍历列表并对每个对象调用save() 那么Django是否多次访问数据库?或者Django将执行一批保存 不幸的是,Django 1.3和更早版本不直接支持批插入。如果要使用ORM,则必须对每个对象调用save()。如果它是一个大列表,并且性能是一个问题,那么可以使用django.db.cursor在事务中手动插入项目,以显著加快处理速度。如果你有一个巨大的数据集,你需要开始研究特定于数据

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

我试图将对象列表保存到数据库中,但我能做的是循环遍历列表并对每个对象调用save()


那么Django是否多次访问数据库?或者Django将执行一批保存

不幸的是,Django 1.3和更早版本不直接支持批插入。如果要使用ORM,则必须对每个对象调用save()。如果它是一个大列表,并且性能是一个问题,那么可以使用django.db.cursor在事务中手动插入项目,以显著加快处理速度。如果你有一个巨大的数据集,你需要开始研究特定于数据库引擎的方法,比如Postgres中的COPY FROM。

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

这个问题也在,它提供了一些让Django做到这一点的方法。

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


  • 来自Django 1.4的存在
    bulk\u create()
    ,但是,总是但是

    您需要小心,使用
    bulk\u create()
    它不会在内部调用instance
    save()
    方法

    正如django博士所说

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


    所以,如果您要覆盖save方法(就像我的情况一样),就不能使用bulk\u create

    非常好!我应该升级到1.4。bulk_create非常棒,但遗憾的是它不支持继承的模型。有什么想法可以解决这个问题吗?请特别注意“。django 1.5仍然是这样吗?没有-请参阅下面的答案。从1.4开始,
    bulk\u create()
    将处理有效的批量数据插入。()复制自仍然比批量创建好得多?现在批量创建()在django 1.4及更高版本中可用,也许值得更改公认的答案