在django中使用loaddata和dumpdata进行多部分导出/导入

时间:2017-06-12 17:56:11

标签: json django

所以我用django制作了一个dumpdata,但我的文件非常大。

有没有人知道如何在django中使用dumpdata和loaddata进行多部分导出和导入?

我主要使用的应用程序占用了最大的尺寸,因此我可以通过app分开。

谢谢和问候

2 个答案:

答案 0 :(得分:0)

这可能有点复杂,但我会尝试简单。 首先,您需要列出应用中的所有模型。

for model in django.apps.apps.get_models():
    print(model.__name__)
    subprocess.call('python', 'manage.py', 'dumpdata', model.__name__)

您可以根据需要修改此subprocess.call,无论您是要将其存储在文件中还是其他内容中。就像你可以将模型的数据保存到文件中一样。

>>> python manage.py dumpdata app._name.model_name > model_name_dump.json

同样,您也可以使用loaddata。以下是json转储的示例:

[
  {
    "model": "app.user",
    "pk": 1,
    "fields": {
      "password": "pbkdf2_sha256$30000$1LwvC3DJb6RI$P4nYQK/9UyDEiZpEJjfl0SATBiL5l8dRZ61QE83TzS4=",
      "last_login": "2017-06-09T11:41:26Z",
      "email": "SOLANKIARPIT1997@GMAIL.COM",
      "is_active": true,
      "is_account_active": true,
      "first_name": "arpit",
      "last_name": "solanki",
      "created_at": "2017-06-09T11:40:59Z",
      "is_superuser": false,
      "groups": [
        2
      ],
      "user_permissions": []
    }
  }
  {
    "model": "app.user",
    "pk": 2,
    "fields": {
      "password": "pbkdfjgkf2_sha256$30000$1LwvC3DJb6RI$P4nYQK/9UyDEiZpEJjfl0SATBiL5l8dRZ61QE83TzS4=",
      "last_login": "2017-06-09T11:41:26Z",
      "email": "SOLANKRPIT1997@GMAIL.COM",
      "is_active": true,
      "is_account_active": true,
      "first_name": "arpit",
      "last_name": "solnki",
      "created_at": "2017-06-09T11:40:59Z",
      "is_superuser": false,
      "groups": [
        2
      ],
      "user_permissions": []
    }
  }
. .
. .
]

将json转储分成多个小文件也很容易,因为它有一个非常好的修复结构。

答案 1 :(得分:0)

基于@Arpit Solanki 的回答,最后我使用以下脚本导出:

import subprocess
from django.apps import apps
for model in apps.get_models():
    model_str = f'{model._meta.app_label}.{model.__name__}.json'
    print(model_str)
    subprocess.call(['python', 'manage.py', 'dumpdata', '--indent', '2', '-o', f'{model_str}.json', model_str])

当然,'--indent', '2' 参数是可选的。此脚本需要 Python 3。