Данные дампа Django для одной модели?

148

Могу ли я выполнить dumpdataв Django только одну модель, а не все приложение, и если да, то как?

Для приложения это будет:

python manage.py dumpdata myapp

Однако я хочу, чтобы какая-то конкретная модель, например myapp.mymodel, была выгружена. Причина в том, что у меня есть несколько огромных, 3 миллиона записей плюс наборы данных в том же приложении, которые я не хотел бы сбрасывать.

лапша
источник
1
Мне непросто понять ваш вопрос. Вы хотите загрузить дамп SQL в свою базу данных? Или вы хотите сделать что-то вроде toString () для экземпляра модели?
Леонард Эренфрид

Ответы:

253

Начиная с версии 1.1 и выше, команда dumpdataуправления Django позволяет выгружать данные из отдельных таблиц:

./manage.py dumpdata myapp1 myapp2.my_model

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

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
просто резкий
источник
17
gath, не понял отрицательного голосования на посте, которому почти 2 года. Более того, приведенный выше код отлично работал даже с v1.1. Новые функции в новых выпусках не делают старые ответы недействительными.
justharsh
1
И как мне добавить эти данные в другой экземпляр приложения ?.
aguilarpgc
1
Чтобы сделать json удобочитаемым, используйте flag --indent 4afterdumpdata
Валерий Рамусик 03
103

Как уже отмечалось, вы не можете сделать это с помощью команды 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()
дар
источник
4
Это отличный сценарий, потому что вы можете сделать его еще более детализированным, если хотите. Если вместо этого вы выполните .filter (...) в третьей строке выше, вы можете выгрузить только те записи, которые вам нужны.
Gringo Suave
9

Переведите все данные в формат json из модели django.

Синтаксис:

python manage.py dumpdata app_name.model_name

Для примера сброса данных из group_permission модели , которые постоянно находятся в Идент по умолчанию приложения в Django.

python manage.py dumpdata auth.group_permission

Для вывода посмотрите на console .

Шубхо Шаха
источник
6

Я думаю, у вас есть решение вашего вопроса. Вы можете сбросить отдельную модель так:

./manage.py dumpdata myapp.my_model
Гарольд
источник
Я пробовал это перед публикацией. не повезло. я в django 1.0. также пробовал myapp.models.mymodel?
nategood
5

Для успеха мне пришлось сказать это дважды и дважды указать модель, например:

./manage.py dumpdata myapp2.my_model myapp2.my_model

Если бы я только сказал

./manage.py dumpdata myapp2 myapp2.my_model

Меня залили все модели в myapp2, несмотря на то, что я указал my_model.

Чаба Тот
источник
1

В качестве обходного пути вы можете создать другое приложение и скопировать модель, но указать ее на существующую таблицу с помощью мета-опции db_table. Затем вы можете просто выгрузить скопированные модели в новое приложение. Ваше существующее приложение не пострадает.

Коды Огре
источник
1

Я создал команду управления для создания прибора для каждой модели. Приспособления можно создать, запустив:

./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json

код по адресу: https://gist.github.com/2394883

Йонас Гейрегат
источник
1

Чтобы записать это в конкретный файл:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
Никко
источник
0

Если вы хотите сбросить только указанные объекты модели, вы можете использовать --pks дополнительного аргумента для dumpdata команды.

--pks PRIMARY_KEYS Выводит только объекты, указанные в списке первичных ключей, разделенных запятыми. Это доступно только при сбросе одной модели. По умолчанию выводятся все записи модели.

dtatarkin
источник