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

django-admin.py dumpdata

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

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

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

Другие вопросы по тегам