Как сделать дбф-файл в django
Я хочу сделать дамп в Django независимо от базы данных, которую я использую, и может быть загружен позже. Команда dumpdata идеально подходит для этого, но она выводит данные на консоль. Более того, я вызываю его с помощью функции call_command, поэтому я не могу сохранить его содержимое в какой-либо переменной, так как он выводит данные на консоль.
Пожалуйста, дайте мне знать, как сохранить дамп в файл, используя dumpdata или любую другую команду или API.
Спасибо
7 ответов
Вы можете выбрать файл для размещения вывода 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 недействительным).
Как упоминается в документации, для создания больших наборов данных вы можете избежать разделов, вызывающих проблемы, и обрабатывать их отдельно.
Следующая команда обычно работает:
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
Выводит на стандартный вывод все данные в базе данных, связанные с именованным приложением (ями).
Как вы знаете, вы можете перенаправить стандартный вывод в файл:
command > file.data
Вы можете сбросить все данные моделей базы данных, используя приведенный ниже код
from django.core.management import call_command
with open("data.json", "w", encoding="utf-8") as fp:
call_command("dumpdata", format="json", indent=2, stdout=fp)
Это создаст файл (
data.json
) в корне папки вашего проекта.
Согласно последней документации (Django 4.0), вы можете сделать
./manage.py dumpdata -o output_file.json
И вы даже можете сжать его с помощью
.gz
Например:
./manage.py dumpdata -o output_file.json.gz
В Linux вы можете просто передать консольный вывод в файл.
manage.py dumpdata> file