Как сделать db dumpfile в django

Я хочу создать дамп в django независимо от базы данных, которую я использую, и ее можно загрузить позже. Команда "dumpdata" идеально подходит для этого, но это вывод на консоль. Более того, я вызываю его с помощью функции call_command, поэтому я не могу хранить его содержимое в любой переменной, поскольку он выводит вывод на консоль.

Пожалуйста, дайте мне знать, как хранить дамп файла, используя dumpdata или любую другую команду или api.

Спасибо

Ответ 1

Вы можете выбрать файл для ввода вывода 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 script, а не в командной строке. Если вы хотите, чтобы он был параметром командной строки, перенаправление (как предложили другие) - ваш лучший выбор.

Ответ 2

Вы просто используете его так:

./manage.py dumpdata > data_dump.json

После этого действия в каталоге, в котором вы выполнили эту команду, будет data_dump.json файл.

С этим связано несколько вариантов, но вы, вероятно, уже знаете об этом. Вам нужно знать, как перенаправить вывод из стандартного вывода в некоторый файл: вы выполняете это действие, помещая > перед именем файла.

Чтобы добавить что-то в файл, вы должны использовать >>, но поскольку вы демпируете данные из Django, а вывод, скорее всего, JSON, вам это не понадобится (потому что это сделает JSON недействительным).

Ответ 3

django-admin.py dumpdata

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

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

command > file.data

Ответ 4

Как упоминается в 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

Ответ 5

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

manage.py dumpdata > file