Django despeja dados para um único modelo?

144

Posso executar um dumpdatano Django em apenas um modelo, em vez de no aplicativo inteiro, e se sim, como?

Para um aplicativo, seria:

python manage.py dumpdata myapp

No entanto, quero que um modelo específico, como "myapp.mymodel", seja despejado. A razão é que eu tenho alguns enormes 3 milhões de registros, mais, conjuntos de dados no mesmo aplicativo que eu não gostaria que fossem descartados.

nategood
fonte
1
Acho que sua pergunta não é fácil de entender. Deseja carregar um dump SQL no seu banco de dados? Ou você deseja fazer algum tipo de toString () e instância de um modelo?
11119 Leonard Ehrenfried

Respostas:

245

A partir da versão 1.1 e posterior, o dumpdatacomando de gerenciamento do Django permite despejar dados de tabelas individuais:

./manage.py dumpdata myapp1 myapp2.my_model

Você também pode separar vários aplicativos e modelos na linha de comando. Aqui está a definição canônica:

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
simplyharsh
fonte
17
gath, não entendi o voto negativo no post que tem quase 2 anos de idade. Além disso, o código acima funcionou bem mesmo com a v1.1. Novos recursos em novos lançamentos não invalidam respostas antigas.
simplyharsh
1
E como adiciono esses dados em outra instância do aplicativo?
aguilarpgc
1
Para tornar bandeira utilização json legível --indent 4depoisdumpdata
Valery Ramusik
103

Como observado, você não pode fazer isso através de um comando manage.py no Django 1.0. No entanto, você pode usar um script para exportar o arquivo JSON e carregá-lo usando 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()
dar
fonte
4
Este é um ótimo script, porque você pode ficar ainda mais granulado, se desejar. Se você fizer um filtro. (...) na linha três acima, poderá despejar apenas os registros específicos que deseja.
Gringo Suave
1
Agradável! Definitivamente melhor controle desta maneira.
Luis Artola
9

Pegue todos os dados no formato json do modelo django.

Sintaxe:

python manage.py dumpdata app_name.model_name

Por exemplo, descarregar dados do modelo group_permission que residem no aplicativo de autenticação padrão no django.

python manage.py dumpdata auth.group_permission

Para saída, dê uma olhada no console .

Shubho Shaha
fonte
6

Eu acho que você tinha a solução em sua pergunta. Você pode despejar um modelo individual como este:

./manage.py dumpdata myapp.my_model
Harold
fonte
Eu tentei antes de postar. não teve sorte. Estou no django 1.0. também tentou myapp.models.mymodel?
Nategood 11/07/2009
4

Para ter sucesso, tive que repetir duas vezes e especificar o modelo duas vezes, como:

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

Se eu apenas dissesse

./manage.py dumpdata myapp2 myapp2.my_model

Fui inundado com todos os modelos no myapp2, apesar de ter especificado o meu_model.

Csaba Toth
fonte
1

Como solução alternativa, você pode criar outro aplicativo e copiar o modelo, mas apontá-lo para a tabela existente com a opção meta db_table. Então você pode simplesmente despejar os modelos copiados no novo aplicativo. Seu aplicativo existente não seria afetado.

Códigos de Ogro
fonte
1

Eu criei um comando de gerenciamento para gerar um dispositivo elétrico por modelo. Os equipamentos podem ser gerados executando:

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

código em: https://gist.github.com/2394883

Jonas Geiregat
fonte
1

Para escrevê-lo em arquivo específico:

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