【问题标题】:Make a multipart export / import with loaddata and dumpdata in django在 django 中使用 loaddata 和 dumpdata 进行多部分导出/导入
【发布时间】:2017-06-12 17:56:11
【问题描述】:

所以我用 django 做了一个转储数据,但我的文件真的很大。

有人对如何在 django 中使用 dumpdata 和 loaddata 进行多部分导出和导入有任何提示吗?

我主要有一个尺寸最大的应用程序,因此我可以按应用程序分开。

感谢和问候

【问题讨论】:

  • 导入很简单。只需打开文件并将其分成两个或三个部分。它基本上是 json

标签: json django


【解决方案1】:

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

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 转储拆分为多个小文件,因为它具有非常固定的结构。

【讨论】:

  • 我还有一个模型占用了 90% 的空间:/ 但是谢谢
  • 做一件事,在像 sublime 这样好的文本编辑器中打开该文件,并在其上使用 json 美化器。您将能够看到 json 的结构,然后您就会知道编写一个将大文件拆分为小文件的脚本非常容易
  • @user462794 现在好点还是你还需要别的东西。
  • 我的 json 文件是 6 gigas :/ 所以我不能简单地编辑它
  • 您仍然可以使用 python 脚本打开文件加载数据并将其复制到多个文件中。顺便说一句,您应该在问题描述中提供清晰的场景
【解决方案2】:

基于@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。

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2019-12-29
    • 2011-03-04
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多