Ah… abstração de camada! Eis a grande vantagem de arquitetura em camadas! Pois é, com o django não poderia ser diferente.
Imagine você, desenvolvedor, que precisa trazer para perto de você o banco daquele site que você está desenvolvendo… Mas não sabe nada a respeito de banco de dados, como fazer um dump, clone, outra visão, backup. Ou você quer algo rápido python-like.
O Django tem duas ferramentas campeãs, o dumpdata e o loaddata.
O dumpdata extrai o banco e o loaddata carrega.
Essas ferramentas podem, e devem, por simplicidade, usadas com o manage.py de seu site. Se você não quiser, você deve usar o django-admin.py. Configurando propriamente a variavel de ambiente DJANGO_SETTINGS_MODULE ou o argumento --settings com o caminho para o seu settings.py.
Mas vamos considerar que você está no diretório do seu projeto e você escolheu usar o manage.py. Ah sempre considero que você está no linux.
dumpdata
Para usar o dumpdata é simples:
python manage.py dumpdata > arquivo.dump
simples não?! Do jeito que está, o comando salva todo o banco num arquivo.dump . Sem fazer quaisquer destinções.
Mas quer fazer o dump de somente uma aplicação, não tem problema:
python manage.py dumpdata aplicacao > aplicacao.dump
Mas eu quero mais de uma aplicação, mas não todas. Não tem problema:
python manage.py dumpdata aplicacao1 aplicacao2 > aplicacoes.dump
Ah, mas eu só quero de uma classe que eu podei no arquivo modules.py ( Você sabe que as classes definidas nesse arquivo são persistidas ). Porque não disse antes?
python manage.py dumpdata aplicacao.Modulo> aplicacoes_modulo.dump
Acho que não tem mais situações… agora é hora de carregar!
loaddata
A essa é facinho! Basta você fazer:
python manage.py loaddata arquivo_que_vc_gerou
Pronto! Fácil?!
Você pode ver algumas opções nos links que eu indiquei (olhe no início do post). Eu enfrentei dificuldades com o tabelas que tinham muitas entradas (+55 mil). Então acredito que a ferramenta tenha essa limitação com bancos grandes. Funcionou com Mysql, sqlite3 e o Microsoft SqlServer.