Как сделать DB dumpfile в django
Я хочу сделать дамп в django независимо от базы данных, которую я использую, и может быть загружен позже. Для этого идеально подходит команда "dumpdata", но она печатает вывод на консоли. Более того, я вызываю его с помощью функции call_command, поэтому я не могу хранить его содержимое в любой переменной, поскольку он печатает вывод на консоли.
пожалуйста, дайте мне знать, как хранить дамп в файл с помощью dumpdata или любой другой команды или api.
спасибо
5 ответов
вы can выберите файл для вывода dumpdata, если вы вызываете его из Python с помощью call_command
, например:
from django.core.management import call_command
output = open(output_filename,'w') # Point stdout at a file for dumping data to.
call_command('dumpdata','model_name',format='json',indent=3,stdout=output)
output.close()
однако, если вы попытаетесь вызвать это из командной строки, например --stdout=filename.json
в конце вашей команды dumpdata он дает ошибку manage.py: error: no such option: --stdout
.
Итак, он есть, вам просто нужно вызвать его в скрипте Python, а не в командной строке. Если вы хотите его в качестве опции командной строки, то перенаправление (как и другие предложили) - ваш лучший выбор.
вы просто используете его так:
./manage.py dumpdata > data_dump.json
после этого действия будет data_dump.json
файл в каталоге, в котором вы выполнили эту команду.
есть несколько вариантов, приходящих с этим, но вы, вероятно, уже знаете это. Что вам нужно знать, как перенаправление вывода из стандартного вывода в файл: вы выполняете это действие, поставив >
перед именем файла.
чтобы добавить что-то в файл, который вы бы использовали >>
, но поскольку вы сбрасываете данные из Django, а выход, скорее всего, JSON, вы этого не захотите (потому что это сделает JSON недействительным).
выходы в стандартный вывод все данные в базе данных, связанные с в названном приложении(Ях).
Как вы знаете, вы можете редирект стандартный вывод в файл:
command > file.data
Как говорится в docs, чтобы сбросить большие наборы данных, вы можете избежать разделов, вызывающих проблемы, и обрабатывать их отдельно.
обычно работает следующая команда:
python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json
python manage.py loaddata db.json
в случае, если вы можете экспортировать позже на основе данных:
python manage.py dumpdata auth.permission > auth.json
python manage.py loaddata auth.json