Данінг Django для однієї моделі?


144

Чи можу я виконати dumpdataв Джанго лише одну модель, а не всю програму, і якщо так, то як?

Для додатка це було б:

python manage.py dumpdata myapp

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


1
Я вважаю ваше запитання непростим для розуміння. Ви хочете завантажити дамп SQL у свою базу даних? Або ви хочете зробити якийсь toString () для і екземпляр моделі?
Леонард Еренфрід

Відповіді:


245

Починаючи з версії 1.1 і вище, dumpdataкоманда управління Django дозволяє скидати дані з окремих таблиць:

./manage.py dumpdata myapp1 myapp2.my_model

Ви також можете відокремити кілька програм та моделей у командному рядку. Ось канонічне визначення:

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]

17
Гет, не зрозумів негативного голосування на посаді, якій майже 2 роки. Крім того, вище код працював добре навіть з v1.1. Нові функції у нових випусках не роблять старі відповіді недійсними.
жорсткий

1
І як я можу додати ці дані в інший екземпляр програми ?.
aguilarpgc

1
Щоб зробити читабельним для людини json, використовуйте прапор --indent 4післяdumpdata
Валерій Рамусик

103

Як зазначалося, цього не можна зробити за допомогою команди Manag.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

1
Приємно! Однозначно тонший контроль таким чином.
Луїс Артола

9

Візьміть усі дані у формат json з моделі django.

Синтаксис:

python manage.py dumpdata app_name.model_name

Для прикладу скидання даних з group_permission моделі , які постійно перебувають в Ідент по замовчуванням додатки в Django.

python manage.py dumpdata auth.group_permission

Для виходу подивіться на консоль .


6

Я думаю, ви вирішили своє питання. Ви можете скинути окрему модель на зразок цієї:

./manage.py dumpdata myapp.my_model

Я спробував це перед публікацією. не пощастило. я в джанго 1.0. також спробував myapp.models.mymodel?
nategood

4

Для успіху мені довелося сказати це двічі і вказати модель два рази, як-от:

./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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.