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

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

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

python manage.py dumpdata myapp

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


person nategood    schedule 11.07.2009    source источник
comment
Мне непросто понять ваш вопрос. Вы хотите загрузить дамп SQL в свою базу данных? Или вы хотите сделать что-то вроде toString () для экземпляра модели?   -  person Leonard Ehrenfried    schedule 11.07.2009


Ответы (11)



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

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

Синтаксис:

python manage.py dumpdata app_name.model_name

Например, пример сброса данных из модели group_permission, которая находится в приложении аутентификации по умолчанию в django.

python manage.py dumpdata auth.group_permission

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

person Shubho Shaha    schedule 07.08.2017

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

./manage.py dumpdata myapp.my_model
person Harold    schedule 11.07.2009
comment
я пробовал это перед публикацией. не повезло. я в django 1.0. также пробовал myapp.models.mymodel? - person nategood; 11.07.2009

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

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

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

./manage.py dumpdata myapp2 myapp2.my_model

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

person Csaba Toth    schedule 20.05.2015

От конкретной модели к конкретному файлу:

python manage.py dumpdata app_label.ModelName > specific_file.json

и чтобы загрузить его в другое приложение: сначала переместите или скопируйте файл в приложение, где вы хотите его обработать, а затем:

python manage.py loaddata specific_file.json
person sipi09    schedule 09.02.2021

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

person Ogre Codes    schedule 11.07.2009

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

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

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

person Jonas Geiregat    schedule 15.04.2012

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

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
person Nikko    schedule 19.11.2019

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

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

person dtatarkin    schedule 02.10.2020

Для новичков в Django и Python, таких как я, это может быть полезно:

если вы хотите выгрузить только одну строку (очевидно, из одной таблицы), и у вас есть, например, продавец приложения, и модель также называется Merchant, и вы обычно импортируете ее, используя полное имя, например: merchant.models.Merchant; даже не пытайтесь использовать это имя. Синтаксис следующий:

# only dumps the merchant with id = 123, pretty printed
python manage.py dumpdata merchant.Merchant --pks 123 --indent 2
person Clint Eastwood    schedule 10.03.2021