Данные дампа Django для одной модели?
-
12-09-2019 - |
Вопрос
Могу ли я выполнить dumpdata
в Джанго только для одной модели, а не для всего приложения, и если да, то как?
Для приложения это будет:
python manage.py dumpdata myapp
Однако я хочу, чтобы была сброшена какая-то конкретная модель, например «myapp.mymodel».Причина в том, что у меня есть несколько огромных, более 3 миллионов записей, наборов данных в одном приложении, которые мне не хотелось бы сбрасывать.
Решение
Начиная с версии 1.1 и выше, Django dumpdata
Команда управления позволяет выгружать данные из отдельных таблиц:
./manage.py dumpdata myapp1 myapp2.my_model
Вы также можете разделить несколько приложений и моделей в командной строке.Вот каноническое определение:
django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
Другие советы
Как уже отмечалось, вы не можете сделать это с помощью команды Manage.py в Django 1.0.Однако вы можете использовать скрипт для экспорта файла JSON и загрузить его, используя loaddata
:
from django.core import serializers
from myproject.myapp import models
data = serializers.serialize("json", models.MyModel.objects.all())
out = open("mymodel.json", "w")
out.write(data)
out.close()
Я думаю, что у вас было решение в вашем вопросе.Вы можете сбросить отдельную модель следующим образом:
./manage.py dumpdata myapp.my_model
Перенесите все данные в формат json из модели django.
Синтаксис:
python manage.py dumpdata app_name.model_name
Для пример выгрузка данных из модели group_permission, которая находится в приложении аутентификации по умолчанию в django.
python manage.py dumpdata auth.group_permission
Для вывода посмотрите консоль.
Для успеха мне пришлось произнести это дважды и указать модель два раза, например:
./manage.py dumpdata myapp2.my_model myapp2.my_model
Если бы я только сказал
./manage.py dumpdata myapp2 myapp2.my_model
Меня завалило всеми моделями в myapp2, несмотря на то, что я указал my_model.
В качестве обходного пути вы можете создать другое приложение и скопировать модель, но указать ее на существующую таблицу с помощью мета-параметра db_table.Затем вы можете просто загрузить модели, которые вы скопировали, в новое приложение.Ваше существующее приложение не будет затронуто.
Я создал команду управления для создания приспособления для каждой модели.Фикстуры можно создать, запустив:
./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json
код по адресу: https://gist.github.com/2394883