Meus últimos posts

Apaixonado por programação criei este blog para compartilhar expêriencias com outros programadores, nele mostro dicas e soluções para resolver determinadas situações.
Django 1.8 migração em base existente
Django 1.8 migração em base existente

Finalmente a migração chegou de forma nativa no Django, a manipulação na base de dados de forma manual sempre requer cuidados para não excluir, alterar ou criar dados por engano.  Através de uma ferramenta de terceiros chamada south é possivel fazer toda e parte de criação, alteração e atualização na base de dados de forma automatica.

Percebendo a necessidade dos programadores foi incluso a migraçao de forma nativa a partir do Django  1.7, a  versão que estou usando é a 1.8.3

Então o que mudou? não existe mais o tradicional comando "python manage.py syncdb" e sim os novos comandos que devem ser usados dependendo do projeto para efetuar sua migração de base existente ou não.

Para um novo projeto é bem fácil fazer essa "sincronização" criando os modelos de dados de forma segura e correta através de comendos via shell "terminal"

É aconselhável um backup da base de dados antes de começar as alterações

Para gerar os models de forma geral. Esta forma é apenas para projetos novos

>>>python manage.py makemigrations

>>>python manage.py migrate

 

Para atualizar uma alteração na model

>>>python manage.py makemigrations <nome_app>

>>>python manage.py migrate

É so isso muito facil e pratico 

 

Para projetos com base de dados existentes requer um pouco mais de trabalho, siga o passo a passo que da certo.

1- Va em sua base de dados e exclua a tabela django_migrations

2- Va em cada App do projeto e exclua a pasta migrations

3- Execute o seguinte  comando para cada app. Cuidado com as dependências (Model  com ForeignKey deve ser executado depois de seu Model pai).

>>>python manage.py migrate --fake-inicial

>>>python manage.py makemigrations <app> 

>>>python manage.py migrate

Caso aconteça o seguinte erro  table already exists, execulte o seguinte comando

>>> python manage.py migrate --fake <nome_app>

Para alterações

>>>python manage.py makemigrations <nome_app>

>>>python manage.py migrate 

É isso ae depois que a migração estiver funcionando a base de dados sera alterada altomaticamente pelo comando migrate =)