Redefinir migrações no Django
Ao trabalhar com bancos de dados, geralmente temos que redefinir um banco de dados porque o preenchemos com dados inúteis. Às vezes, acabamos até configurando um banco de dados com base em um esquema de banco de dados sujeito a erros. Às vezes, acabamos até mudando a lógica de negócios, que ajusta todo o design do banco de dados. Essas situações são bastante comuns no campo da Ciência da Computação, e algumas boas ferramentas e comandos foram construídos para lidar com elas.
No Django, se acabarmos em tal situação, temos que redefinir as migrações e o banco de dados. Ao redefinir as migrações, temos algumas opções na lista.
- Redefinir todo o banco de dados
- Reverter um aplicativo Django para algumas migrações antigas
Redefinir todo o banco de dados no Django
Quando precisamos redefinir todo o banco de dados no Django, existem algumas opções na lista.
- Se estivermos usando o banco de dados SQLite padrão do Django, podemos deletar o arquivo de banco de dados
db.sqlite3
e então deletar todas as pastasmigrations
dentro de todos os aplicativos. Depois de deletar as pastasmigrations
, podemos refazer as migrações e migrá-las usando dois comandos; a saber,python manage.py makemigrations
epython manage.py migrate
. - Se estivermos usando algum outro banco de dados relacional como PostgreSQL ou MySQL, podemos excluir todas as tabelas usando uma ferramenta de gerenciamento de banco de dados como
pgAdmin
,DBeaver
, etc. ou manualmente usando a linha de comando. Ou podemos criar um novo banco de dados e então conectá-lo ao nosso Projeto Django. Note que, para ambos os casos, deve-se primeiro deletar todas as pastasmigrations
e depois refazer as migrações e, por último, migrá-las. - Outra opção é usar o comando
manage.py
do Django para limpar todo o banco de dados para nós. O comando épython manage.py flush
. Novamente, depois de usar este comando, temos que deletar todas as pastasmigrations
e então fazer as novas migrações.
Reverter um aplicativo Django para suas antigas migrações
Se não tivermos que redefinir todo o banco de dados, mas reverter as migrações para um aplicativo Django específico, temos duas opções para isso. Primeiro, podemos reverter as migrações atuais de um aplicativo Django para algumas migrações antigas. Em segundo lugar, podemos redefinir todas as migrações para o aplicativo Django.
Se precisarmos migrar de volta de alguma migração mais recente, digamos 0014, para uma migração mais antiga, digamos 0008, podemos usar os seguintes comandos.
python manage.py migrate AppName 0008
--- OR ---
python manage.py migrate AppName 0008_migration_name
E, se tivermos que redefinir todas as migrações para um aplicativo Django, podemos usar o seguinte comando.
python manage.py migrate AppName zero
Observe que às vezes as migrações podem ser irreversíveis. Geralmente, esta condição surge quando algumas mudanças significativas são feitas nos Modelos Django. Quando tentarmos voltar a tal migração, Django irá gerar um IrreversibleError
.