🚀 Capítulo 17: Operações Secretas

NOTE

Este capítulo utiliza a temática de Missão Impossível para explicar o uso de ORM (Mapeamento Objeto-Relacional) em Python usando o SQLAlchemy. Aprenda a mexer no banco de dados sem digitar código SQL!


🎯 Objetivo da Aula

Compreender o conceito de ORM (Object-Relational Mapping), aprendendo a usar o SQLAlchemy para mapear tabelas do banco de dados como classes Python e realizar operações de cadastro e busca.

🏢 O Cenário Prático (Seu Desafio)

O agente Ethan Hunt precisa acessar o banco de dados de uma organização criminosa para obter a lista de agentes inimigos. Ele não sabe falar a língua nativa do sistema (o código SQL). Para ajudá-lo, a equipe técnica dá a ele um dispositivo tradutor em tempo real (o ORM). Ele mexe no dispositivo usando comandos simples em Python, e o dispositivo traduz isso para o banco de dados!

No Python, o SQLAlchemy é o nosso tradutor de elite.

  • Em vez de escrever comandos SQL gigantes como SELECT * FROM usuarios WHERE id = 1, você digita apenas db.query(Usuario).filter(Usuario.id == 1).first().
  • O Python faz a tradução e busca os dados para você! Seu desafio é realizar essa operação secreta!

🧠 Fundamentos: A Teoria Traduzida

🗺️ 1. O que é um ORM?

É uma técnica que nos permite conversar com o banco de dados usando a Programação Orientada a Objetos. Cada tabela do banco vira uma Classe no Python, e cada linha da tabela vira um Objeto!

🏗️ 2. Mapeando a Tabela (O Modelo):

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
 
Base = declarative_base()
 
 
class Agente(Base):
    __tablename__ = "agentes"
 
    id = Column(Integer, primary_key=True, index=True)
    nome = Column(String)
    codinome = Column(String)

🔍 3. Buscando Dados (A Operação):

Para buscar dados, usamos uma sessão de banco de dados (db):

# Busca o primeiro agente com o codinome 'Ethan'
agente_secreto = db.query(Agente).filter(Agente.codinome == "Ethan").first()
print(agente_secreto.nome)

📖 Exemplo Guiado: Cadastrando um Novo Agente

Veja como cadastraríamos um novo agente no banco de dados usando o SQLAlchemy:

# 1. Cria o objeto Python
novo_agente = Agente(nome="William Brandt", codinome="Analista")
 
# 2. Adiciona na sessão do banco
db.add(novo_agente)
 
# 3. Salva definitivamente (Commit)
db.commit()
 
print("Agente infiltrado com sucesso!")

🛠️ Prática Obrigatória 1: Criando o Modelo

  1. Escreva o código de uma classe chamada Missao (herdando de Base) que represente a tabela "missoes" e tenha uma coluna id (inteiro e chave primária) e uma coluna descricao (string).

🛠️ Prática Obrigatória 2: Buscando Todos

  1. Qual é o método do SQLAlchemy que usamos depois do .query(Agente) para buscar todos os registros da tabela de uma vez, em vez de apenas o primeiro? (Dica: rima com “small”).

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

Neste curso, você entregará suas atividades enviando o código para o seu repositório no GitHub usando o aplicativo GitHub Desktop. Siga o passo a passo detalhado:

  1. Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
  2. Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
  3. Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
  4. Faça o Commit:
    • No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex: Finaliza atividades do Capítulo.
    • Clique no botão azul Commit to main (ou o nome da sua branch).
  5. Envie para a Nuvem (Push): No topo da tela, clique no botão Push origin. Isso enviará seu código do seu computador para o seu perfil no GitHub.
  6. ⚠️ IMPORTANTE (Repositório Público): Para que o professor consiga corrigir, o seu repositório no GitHub DEVE SER PÚBLICO. Repositórios privados não podem ser visualizados por quem não foi convidado.
  7. Como entregar no Microsoft Teams:
    • Copie o link do seu repositório no GitHub (ex: https://github.com/seu-usuario/seu-repositorio).
    • Abra a tarefa correspondente no Microsoft Teams.
    • Clique no botão Adicionar trabalho (ou Add work).
    • Selecione a opção Link no menu lateral.
    • Cole o link do GitHub no campo “Endereço Web” e digite um texto (ex: Meu Repositório) no campo “Texto a ser exibido”.
    • Clique em Anexar.
    • MUITO IMPORTANTE: Clique no botão Entregar (ou Turn in) no canto superior direito para concluir o envio!

📂 Estrutura de Pastas

spec_backend_com_python_e_fastapi/
├── capitulos/
│   └── capitulo_17_missao_impossivel.md

💡 Checkpoint de Lógica

O SQLAlchemy é tão poderoso que se você decidir mudar o seu banco de dados de MySQL para PostgreSQL, você só precisa mudar uma linha de configuração da conexão. O código das suas buscas continua exatamente o mesmo!

🔥 Desafio de Fixação (Opcional)

Pesquise sobre o SQLModel, uma biblioteca mais recente criada pelo mesmo criador do FastAPI, que une o poder do SQLAlchemy com o Pydantic em uma única ferramenta!

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

class Missao(Base):
    __tablename__ = "missoes"
    id = Column(Integer, primary_key=True)
    descricao = Column(String)

Gabarito da Prática 2:

  1. Usamos o método .all(). Exemplo: db.query(Agente).all().

Capitulo Anterior | Proximo Capitulo