0Pricing
Python Academy · Aula

Definição de modelos

Mapeie classes para tabelas

Definição de modelos é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

Os modelos são associados a tabelas

No mapeamento objeto-relacional do SQLAlchemy, um modelo é uma classe Python associada a uma tabela do banco de dados. Cada instância se torna uma linha.

Os modelos herdam de uma classe Base compartilhada.

from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
    pass
print('Base class ready')

O __tablename__

Cada modelo define __tablename__ para nomear sua tabela. O SQLAlchemy usa esse valor ao gerar SQL.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
print(User.__tablename__)

Colunas com Mapped

O SQLAlchemy moderno declara colunas com anotações de tipo: Mapped[int] e mapped_column(). A anotação de tipo define o tipo Python e informa o tipo da coluna.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    age: Mapped[int]
print('User has id, name, age')

A chave primária

Marque uma coluna como chave primária com primary_key=True. As chaves primárias inteiras são incrementadas automaticamente por padrão.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class Product(Base):
    __tablename__ = 'products'
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
print('id is the primary key')

Colunas opcionais

Use Mapped[str | None] ou Optional[str] para permitir valores NULL. Um Mapped[str] simples corresponde a NOT NULL.

from typing import Optional
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    nickname: Mapped[Optional[str]]
print('nickname can be NULL')

Valores padrão e exclusividade

mapped_column() aceita opções como unique=True e default= para adicionar restrições e valores substitutos.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    email: Mapped[str] = mapped_column(unique=True)
    active: Mapped[bool] = mapped_column(default=True)
print('email is unique, active defaults to True')

Comprimento de texto

Para bancos de dados que exigem isso, defina o comprimento de uma cadeia de caracteres com mapped_column(String(50)).

from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(String(50))
print('name limited to 50 chars')

Criando o esquema

Base.metadata.create_all(engine) cria tabelas para todos os modelos que herdam de Base.

from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Schema created')

Criando instâncias

Crie uma linha instanciando o modelo como um objeto Python comum e passando os valores das colunas como argumentos nomeados.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
u = User(name='Alice')
print(u.name)

Adicionando um __repr__

Um __repr__ personalizado facilita a depuração ao exibir claramente os dados do objeto.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    def __repr__(self):
        return 'User(name=' + self.name + ')'
print(repr(User(name='Bob')))

Os modelos continuam sendo Python comum

Um modelo ainda é uma classe comum. Você pode adicionar métodos e propriedades que operem sobre seus dados, combinando comportamento com persistência.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    def greet(self):
        return 'Hi, ' + self.name
print(User(name='Carol').greet())

Verificação rápida

Teste suas habilidades de definição de modelos.

Recapitulação

Você aprendeu a definir modelos de mapeamento objeto-relacional.

  • Os modelos herdam de uma DeclarativeBase e definem __tablename__
  • As colunas usam Mapped[type] e mapped_column()
  • primary_key, unique e default adicionam restrições
  • create_all() cria as tabelas

Perguntas Frequentes

A aula “Definição de modelos” é grátis?

Sim — o texto completo de “Definição de modelos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “Definição de modelos”?

Mapeie classes para tabelas Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Definição de modelos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. SQLAlchemy Core versus ORM
  2. Definição de modelos
  3. Consultas com a Session
  4. Relacionamentos e junções
← Voltar para Python Academy