Programador Leigo
SQLAlchemy 12 min leitura 01 MAR 2026

SQLAlchemy ORM: mapeie tabelas em classes Python

Chega de SQL manual. Modele seu banco de dados com classes Python de forma limpa.


O que é um ORM?

ORM significa Object-Relational Mapping. É uma técnica que permite interagir com o banco de dados usando objetos Python em vez de escrever SQL manualmente. O SQLAlchemy é o ORM mais popular do ecossistema Python e funciona com diversos bancos: PostgreSQL, MySQL, SQLite e outros.

A ideia central é simples: cada tabela do banco vira uma classe Python, e cada linha vira uma instância dessa classe.

pip install sqlalchemy

Configuração inicial

Para começar, você precisa criar uma engine (conexão com o banco) e uma base para seus modelos:

from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Session

engine = create_engine("sqlite:///meu_banco.db", echo=True)

class Base(DeclarativeBase):
    pass

O parâmetro echo=True faz o SQLAlchemy imprimir as queries SQL geradas, o que é útil durante o desenvolvimento.

Definindo modelos

Um modelo é uma classe que herda de Base e representa uma tabela no banco:

from sqlalchemy import Column, Integer, String, Float, ForeignKey
from sqlalchemy.orm import relationship

class Produto(Base):
    __tablename__ = "produtos"

    id = Column(Integer, primary_key=True)
    nome = Column(String(100), nullable=False)
    preco = Column(Float, nullable=False)
    categoria_id = Column(Integer, ForeignKey("categorias.id"))

    categoria = relationship("Categoria", back_populates="produtos")

    def __repr__(self):
        return f"<Produto(nome='{self.nome}', preco={self.preco})>"

class Categoria(Base):
    __tablename__ = "categorias"

    id = Column(Integer, primary_key=True)
    nome = Column(String(50), nullable=False)

    produtos = relationship("Produto", back_populates="categoria")

Para criar as tabelas no banco:

Base.metadata.create_all(engine)

Operações CRUD

Com os modelos definidos, você pode criar, ler, atualizar e deletar registros usando Python puro:

from sqlalchemy.orm import Session

# Criar
with Session(engine) as session:
    eletronicos = Categoria(nome="Eletronicos")
    notebook = Produto(nome="Notebook", preco=3500.00, categoria=eletronicos)

    session.add(eletronicos)
    session.add(notebook)
    session.commit()

# Ler
with Session(engine) as session:
    produtos = session.query(Produto).filter(Produto.preco < 5000).all()
    for p in produtos:
        print(f"{p.nome}: R${p.preco:.2f}")

# Atualizar
with Session(engine) as session:
    produto = session.query(Produto).filter_by(nome="Notebook").first()
    produto.preco = 3200.00
    session.commit()

# Deletar
with Session(engine) as session:
    produto = session.query(Produto).filter_by(nome="Notebook").first()
    session.delete(produto)
    session.commit()

Consultas avançadas

O SQLAlchemy oferece uma API expressiva para consultas mais complexas:

from sqlalchemy import func

with Session(engine) as session:
    # Contar produtos por categoria
    resultado = (
        session.query(
            Categoria.nome,
            func.count(Produto.id).label("total")
        )
        .join(Produto)
        .group_by(Categoria.nome)
        .all()
    )

    for categoria, total in resultado:
        print(f"{categoria}: {total} produtos")

    # Buscar com ordenacao e limite
    caros = (
        session.query(Produto)
        .order_by(Produto.preco.desc())
        .limit(5)
        .all()
    )

Conclusão

O SQLAlchemy transforma a interação com o banco de dados em algo natural para quem programa em Python. Você define modelos como classes, faz consultas com métodos encadeados e deixa o ORM gerar o SQL. Para projetos Flask, a extensão Flask-SQLAlchemy simplifica ainda mais a integração. Comece com SQLite para aprender e migre para PostgreSQL quando estiver em produção.

Continue lendo

Compartilhar