Как сделать 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 недействительным).


django-admin.py dumpdata

выходы в стандартный вывод все данные в базе данных, связанные с в названном приложении(Ях).

Как вы знаете, вы можете редирект стандартный вывод в файл:

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

в Linux вы можете просто передать вывод консоли в файл.

manage.py dumpdata > file