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.


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] ...]]

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()

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 .


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

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.


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.


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


1

Para escrevê-lo em arquivo específico:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.