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.