Trocando de BD sem perder os dados no Django

06/07/2020 - 1 min de leitura

DJANGO

Eu passei por um problema recentemente usando o Django: Eu tinha uma aplicação rodando com o SQLite3 (com vários dados cadastrados) e tive que mudar pra um BD mais robosto (no meu caso, PostgreSQL. Mas poderia ser do MySQL pro PostgreSQL e vice-versa).

Certo... Mas como eu iria resolver esse problema? Teria que fazer um script Python, jogando os dados de um BD pro outro?

A resposta é nãaooo.

O Django possui um comando que retorna todos os dados salvos no BD e seus respectivos Models. A gente salva esse retorno em um arquivo JSON. Veja um exemplo salvando esses dados num arquivo chamado data.json:

python manage.py dumpdata > data.json

Para quem já trabalhou com o conceito de fixtures no Django, vai perceber que os dados do arquivo data.json segue o mesmo padrão.

O próximo passo é alterar no settings a configuração requerida para o seu banco de dados.

Feito a configuração, precisamos rodar as migrations para este novo BD:

python manage.py migrate

Agora vamos remover o ContentType que o Django Adicionou. Ele armazena algumas informações sobre os modelos e serve para orientar as migrações. Recomendo ler mais sobre ele na documentação oficial.

Então, os passos que você terá que fazer é deletar os registros (pois, no nosso dump, já traz ele):

python manage.py shell
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()

Pronto! Agora é só trazer os dados do data.json para o novo BD:

python manage.py loaddata data.json

Funciona bem demais.

Foto da capa: fabio on Unsplash.

Compartilhe

Twitter