Entendendo os Comandos makemigrations e migrate no Django: Passo a Passo para Gerenciamento de Banco de Dados

Introdução

Quando trabalhamos com Django, um dos frameworks Python mais populares para desenvolvimento web, o gerenciamento de banco de dados é parte crucial da construção de aplicações robustas e escaláveis. Os comandos makemigrations e migrate são ferramentas essenciais para manipular o banco de dados de forma organizada, permitindo criar e atualizar tabelas sem precisar lidar diretamente com SQL. Este artigo é um guia passo a passo sobre como e quando usar esses comandos para aplicar alterações no banco de dados de maneira eficiente.


Passo a Passo dos Comandos makemigrations e migrate:

1- Configurando o Ambiente

Antes de iniciarmos, certifique-se de que seu projeto Django está configurado e com um banco de dados conectado. O arquivo settings.py é onde configuramos o banco de dados. Vamos usar o exemplo com um banco SQLite:

# Python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

2- Criando ou Alterando um Model

Imagine que você queira criar um modelo para armazenar dados de produtos em uma aplicação de e-commerce. No arquivo models.py da sua app, adicione a classe do modelo:

# Python
from django.db import models

class Produto(models.Model):
    nome = models.CharField(max_length=100)
    preco = models.DecimalField(max_digits=10, decimal_places=2)
    estoque = models.IntegerField()

    def __str__(self):
        return self.nome

3- Gerando uma Migração com makemigrations

Agora que temos um novo modelo, precisamos criar uma migração, que é um arquivo de controle de versão para as mudanças no banco de dados. No terminal, dentro da pasta do projeto, execute:

# Bash
python manage.py makemigrations

Esse comando cria um arquivo de migração na pasta migrations da sua app. Ele contém instruções para Django aplicar essas mudanças no banco de dados.

4- Verificando o Arquivo de Migração

Se desejar, você pode revisar o arquivo de migração gerado. Ele fica em nome_da_app/migrations/. Esse arquivo conterá algo como:

# Python
from django.db import migrations, models

class Migration(migrations.Migration):

    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='Produto',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nome', models.CharField(max_length=100)),
                ('preco', models.DecimalField(decimal_places=2, max_digits=10)),
                ('estoque', models.IntegerField()),
            ],
        ),
    ]

5- Aplicando a Migração com migrate

Para atualizar o banco de dados com a estrutura criada, utilizamos o comando migrate:

# Bash
python manage.py migrate

Esse comando verifica as migrações pendentes e as aplica ao banco de dados, criando ou atualizando tabelas conforme necessário.

6- Modificando um Modelo Existente

Caso deseje adicionar um campo ao modelo Produto, por exemplo, uma descrição, basta atualizar o modelo e gerar uma nova migração.

# Python
class Produto(models.Model):
    nome = models.CharField(max_length=100)
    preco = models.DecimalField(max_digits=10, decimal_places=2)
    estoque = models.IntegerField()
    descricao = models.TextField(null=True, blank=True)  # novo campo

    def __str__(self):
        return self.nome

Em seguida, execute makemigrations e migrate novamente para aplicar a mudança:

# Bash
python manage.py makemigrations
python manage.py migrate

Conclusão

Os comandos makemigrations e migrate são fundamentais para o desenvolvimento de aplicações Django, permitindo que possamos alterar a estrutura do banco de dados sem precisar manipular SQL diretamente. Com essas ferramentas, gerenciar o ciclo de vida do banco de dados torna-se mais seguro e prático. O uso eficiente desses comandos permite a criação de sistemas que acompanham a evolução da aplicação, mantendo a integridade dos dados e facilitando futuras implementações.

background-sample
profile-picture

Felipe Angeli3 contribuições

@felipexangeli

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Entrar

Rolar para cima