Как сделать 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