所以我用django制作了一个dumpdata,但我的文件非常大。
有没有人知道如何在django中使用dumpdata和loaddata进行多部分导出和导入?
我主要使用的应用程序占用了最大的尺寸,因此我可以通过app分开。
谢谢和问候
答案 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。