📊 Capítulo 05: SQLModel & ORM Declarativo
Especialização Backend com Python & FastAPI
🗺️ A Fusão entre Pydantic e SQLAlchemy no SQLModel
flowchart TD
PYDANTIC["Pydantic BaseModel\n(Validação de Tipos, DTOs & JSON Parsing)"]
--> SQLMODEL["SQLModel (Tiangolo)\n(table=True)"]
SQLALCHEMY["SQLAlchemy Core & ORM 2.0\n(Tabelas Relacionais, SQL Engine & Migrations)"]
--> SQLMODEL
SQLMODEL --> MODEL["Modelo Híbrido Único\n(Funciona simultaneamente como Schema e Entidade de Banco!)"]
style PYDANTIC fill:#ede7f6,stroke:#512da8,stroke-width:2px
style SQLALCHEMY fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style SQLMODEL fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style MODEL fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
🎯 Slide 1: O Fim da Duplicação de Classes
-
Problema Tradicional: Ter que escrever uma classe SQLAlchemy para o banco e outra classe Pydantic idêntica para validação da API.
- Solução com SQLModel: Uma única definição serve para validação e persistência: ```python from sqlmodel import SQLModel, Field from typing import Optional
class Produto(SQLModel, table=True): tablename = “tb_produtos”
id: Optional[int] = Field(default=None, primary_key=True)
nome: str = Field(index=True, max_length=120)
preco: float = Field(gt=0.0)
ativo: bool = Field(default=True) ```
🎯 Slide 2: Separação Limpa de Schemas com Herança
class ProdutoBase(SQLModel):
nome: str
preco: float
class ProdutoCreate(ProdutoBase):
pass
class ProdutoRead(ProdutoBase):
id: int
class ProdutoTable(ProdutoBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
🎯 Slide 3: Compatibilidade Total com SQLAlchemy 2.0
- O SQLModel é construído 100% sobre o SQLAlchemy 2.0, permitindo o uso de todas as expressões avançadas de consulta (
select(),where(),join(),subqueries).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim