Данные дампа 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

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

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json

0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.