【发布时间】:2017-06-12 17:56:11
【问题描述】:
所以我用 django 做了一个转储数据,但我的文件真的很大。
有人对如何在 django 中使用 dumpdata 和 loaddata 进行多部分导出和导入有任何提示吗?
我主要有一个尺寸最大的应用程序,因此我可以按应用程序分开。
感谢和问候
【问题讨论】:
-
导入很简单。只需打开文件并将其分成两个或三个部分。它基本上是 json
所以我用 django 做了一个转储数据,但我的文件真的很大。
有人对如何在 django 中使用 dumpdata 和 loaddata 进行多部分导出和导入有任何提示吗?
我主要有一个尺寸最大的应用程序,因此我可以按应用程序分开。
感谢和问候
【问题讨论】:
这可能有点复杂,但我会尽量简单。 首先,您需要列出应用中的所有模型。
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 转储拆分为多个小文件,因为它具有非常固定的结构。
【讨论】:
基于@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。
【讨论】: