2010-11-18 36 views
30

我在Django的在線文檔中沒有看到關於此主題的任何內容。關於在Django中批量保存對象的問題

我想將對象列表保存到數據庫,但我可以做的是循環訪問列表並在每個對象上調用save()。

那麼Django多次訪問數據庫?或者Django會做一個批量保存呢?

+0

也許值得改變接受的答案,現在bulk_create()在django 1.4中可用並且在 – DMTintner 2015-11-07 14:35:04

回答

10

不幸的是,批量插入是Django 1.3和之前不直接支持的東西。如果你想使用ORM,那麼你必須在每個單獨的對象上調用save()。如果它是一個很大的列表並且性能是一個問題,那麼可以使用django.db.cursor在事務內部手動插入項目,以顯着加快該過程。如果你有一個龐大的數據集,你需要開始查看數據庫引擎特定的方法,比如Postgres中的COPY FROM。

+3

中可用,這對於django 1.5是否仍然如此? – maazza 2013-04-17 10:45:35

+6

否 - 請參閱下面的答案。從1.4開始,'bulk_create()'將處理高效的批量數據插入。 (https://docs.djangoproject.com/en/1.5/ref/models/querysets/#bulk-create) – 2013-04-24 02:44:17

+1

複製From還是更好,然後bulk_create? – sharafjaffri 2014-01-08 07:44:52

1

This可能是一個很好的起點,但正如代碼片段的作者所說,它可能不是生產準備好的。

35

從Django 1.4起,在QuerySet對象上存在一個bulk_create()方法,它允許在單個查詢中插入對象列表。欲瞭解更多信息,請參見:

+0

非常好!那麼我應該升級到1.4。 – netvope 2012-05-24 19:42:08

+0

bulk_create非常棒,但遺憾的是它不支持繼承模型。任何想法來處理? – 2014-09-24 08:14:31

+0

特別要注意,「如果模型的主鍵是一個AutoField,它不會檢索並設置主鍵屬性,除非數據庫後端支持它(當前PostgreSQL)](https:// docs。 djangoproject.com/en/dev/ref/models/querysets/#bulk-create)」。 – Ninjakannon 2017-07-31 21:46:00

2

從Django的1.4存在bulk_create(),但始終卻。

您需要小心,使用bulk_create()它不會在內部調用實例save()方法。

由於Django文檔說

模型的save()方法將不會被調用

所以,如果你是壓倒一切的保存方法,(因爲我的情況是)不能使用bulk_create。