SQLModel – ORM baseado em Pydantic para Python

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

SQLAlchemy e Pydantic são duas ferramentas poderosas no ecossistema Python: uma para trabalhar com bancos de dados e a outra para validação de dados. No entanto, sempre existiu uma lacuna entre elas. A solução para esse problema é o SQLModel – uma ORM baseada em Pydantic que une o melhor dos dois mundos.

O SQLModel permite usar modelos tipados do Pydantic como tabelas ORM do SQLAlchemy. Isso simplifica o desenvolvimento, acelera a criação de APIs e elimina a duplicação de código entre modelos de banco de dados e serializadores.

O que é SQLModel e por que usá-lo

SQLModel é uma biblioteca ORM moderna para Python, criada por Sebastián Ramírez (criador do FastAPI) em 2021. Ela resolve um dos maiores problemas do desenvolvimento web: a duplicação de código entre modelos de banco de dados e esquemas de validação de dados.

Principais vantagens do SQLModel

O SQLModel oferece aos desenvolvedores uma interface unificada para trabalhar com bancos de dados e validação de dados. As principais vantagens incluem:

  • Modelo de dados único: um único modelo para banco de dados e API
  • Validação automática: validação de dados integrada do Pydantic
  • Tipagem: suporte completo a tipos Python e IDEs
  • Compatibilidade: funciona com projetos SQLAlchemy existentes
  • Assincronicidade: suporte nativo a async/await

Instalação e configuração

Instalação básica

pip install sqlmodel

Instalação com dependências adicionais

Para trabalhar com PostgreSQL:

pip install sqlmodel[postgresql]

Para operações assíncronas:

pip install sqlmodel[async]

Instalação completa com todas as dependências:

pip install "sqlmodel[postgresql,async]"

Conexão ao banco de dados

from sqlmodel import SQLModel, create_engine

# SQLite (para desenvolvimento)
engine = create_engine("sqlite:///database.db")

# PostgreSQL
engine = create_engine("postgresql://usuario:senha@localhost/nome_banco")

# MySQL
engine = create_engine("mysql+pymysql://usuario:senha@localhost/nome_banco")

Fundamentos do SQLModel

Criando um modelo básico

from sqlmodel import SQLModel, Field
from typing import Optional

class Usuario(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    nome: str = Field(index=True)
    email: str = Field(unique=True)
    idade: int = Field(ge=0, le=150)
    ativo: bool = Field(default=True)

Parâmetros do Field

O SQLModel usa o Field estendido do Pydantic com recursos adicionais:

class Produto(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    nome: str = Field(max_length=100, index=True)
    preco: float = Field(gt=0, description="Preço do produto")
    categoria_id: int = Field(foreign_key="categoria.id")
    criado_em: datetime = Field(default_factory=datetime.now)

Criando tabelas no banco de dados

from sqlmodel import SQLModel, create_engine

engine = create_engine("sqlite:///database.db")

# Criar todas as tabelas
SQLModel.metadata.create_all(engine)

# Criar uma tabela específica
Usuario.metadata.create_all(engine)

Operações CRUD com SQLModel

Criando registros

from sqlmodel import Session

# Criar um único registro
usuario = Usuario(nome="João", email="joao@exemplo.com", idade=30)

with Session(engine) as session:
    session.add(usuario)
    session.commit()
    session.refresh(usuario)  # Obter o ID do banco
    print(f"Usuário criado com ID: {usuario.id}")

Recommendations