Alembic: Migrações de Banco de Dados com Python e SQLAlchemy

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução

O desenvolvimento de aplicações web modernas está inevitavelmente ligado à evolução da estrutura do banco de dados. Adicionar novas tabelas, alterar tipos de dados, criar índices e modificar relacionamentos entre entidades — tudo isso exige uma abordagem sistemática de gerenciamento. Fazer alterações manuais no esquema do banco de dados pode causar erros, perda de dados e inconsistências entre diferentes ambientes de desenvolvimento.

O Alembic é uma ferramenta poderosa para gerenciar migrações de banco de dados, desenvolvida especialmente para o ecossistema SQLAlchemy. É a solução oficial que garante alterações seguras e controladas na estrutura do banco de dados, permitindo que desenvolvedores acompanhem o histórico de mudanças, apliquem atualizações e, se necessário, revertam modificações problemáticas.

O que é Alembic

Alembic é uma biblioteca para gerenciamento de migrações de banco de dados em projetos Python que utilizam SQLAlchemy. Ela fornece ferramentas para criar, aplicar e reverter alterações no esquema do banco de dados de forma controlada.

Principais vantagens do Alembic

Versionamento de esquema de banco de dados — cada alteração é registrada como uma migração individual com um identificador único, permitindo rastrear a evolução da estrutura dos dados.

Geração automática de migrações — possibilidade de criar arquivos de migração com base em alterações nos modelos ORM do SQLAlchemy, acelerando significativamente o processo de desenvolvimento.

Segurança nas operações — todas as alterações são aplicadas dentro de transações, minimizando o risco de corrupção de dados.

Suporte a diversos SGBDs — funciona com PostgreSQL, MySQL, SQLite, Oracle e outros bancos de dados suportados pelo SQLAlchemy.

Instalação e configuração do Alembic

Instalação do pacote

pip install alembic

Para trabalhar com aplicações assíncronas, também é necessário instalar dependências adicionais:

pip install alembic[asyncio]

Inicialização do projeto de migrações

Após a instalação, é preciso inicializar a estrutura do projeto:

alembic init alembic

O comando criará a seguinte estrutura de arquivos:

alembic/
├── versions/           # Diretório para arquivos de migração
├── env.py             # Configuração do ambiente
├── script.py.mako     # Template para geração de migrações
└── alembic.ini        # Arquivo principal de configuração

Configuração da conexão com o banco de dados

No arquivo alembic.ini, informe a string de conexão com o banco de dados:

sqlalchemy.url = postgresql://usuario:senha@localhost/nome_do_banco

Alternativamente, a conexão pode ser configurada programaticamente no arquivo env.py:

from sqlalchemy import create_engine
from meuprojeto.config import DATABASE_URL

config.set_main_option("sqlalchemy.url", DATABASE_URL)

Integração com SQLAlchemy

Conectando modelos

Para que a autogeração de migrações funcione corretamente, é necessário informar os metadados dos modelos no arquivo alembic/env.py:

from meuprojeto.models import Base

# Informa os metadados para autogeração
target_metadata = Base.metadata

Exemplo de modelo básico

from sqlalchemy import Column, Integer, String, DateTime, Boolean
from sqlalchemy.ext.declarative import declarative_base
from datetime import datetime

Base = declarative_base()

class Usuario(Base):
    __tablename__ = 'usuarios'
    
    id = Column(Integer, primary_key=True)
    nome_usuario = Column(String(50), unique=True, nullable=False)
    email = Column(String(100), unique=True, nullable=False)
    ativo = Column(Boolean, default=True)
    criado_em = Column(DateTime, default=datetime.utcnow)

Recommendations