Especialização em Sistemas com Python & POO com Type Hints • Capítulo 16


🗺️ Mapa Conceitual do Tópico

classDiagram
    class Produto {
        +int id
        +str nome
        +Decimal preco
        +int estoque
    }

    class ProdutoRepository {
        -sqlite3.Connection _conn
        +salvar(produto) int
        +buscar_por_id(id) Produto
        +listar_todos() list~Produto~
    }

    ProdutoRepository --> Produto : Mapeia e Persiste com Queries Parametrizadas (?)

💾 1. Persistência Relacional com sqlite3

O módulo nativo sqlite3 permite integrar bancos relacionais ACID completos sem infraestrutura externa:

  • Consultas Parametrizadas (?): Obrigatórias para mitigar vulnerabilidades de SQL Injection.
  • Transações ACID: Bloco with conn: gerencia commit automático ou rollback em caso de exceção.
  • Padrão Repository (DAO): Isola comandos SQL da camada de regras de negócio.

💻 Exemplo Prático e Tipado

"""
exemplo_16_acesso_a_dados_com_sqlite.py - DAO SQLite3 Parametrizado
"""

import sqlite3
from pathlib import Path


class ClienteDAO:
    def __init__(self, db_path: Path) -> None:
        self.conn = sqlite3.connect(str(db_path))
        self.conn.row_factory = sqlite3.Row
        self._init_db()

    def _init_db(self) -> None:
        with self.conn:
            self.conn.execute("""
            CREATE TABLE IF NOT EXISTS clientes (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                nome TEXT NOT NULL,
                email TEXT UNIQUE NOT NULL
            );
            """)

    def cadastrar(self, nome: str, email: str) -> int:
        with self.conn:
            cursor = self.conn.execute("INSERT INTO clientes (nome, email) VALUES (?, ?);", (nome, email))
            return cursor.lastrowid or 0


if __name__ == "__main__":
    dao = ClienteDAO(Path(":memory:"))
    novo_id = dao.cadastrar("Larissa Duarte", "larissa@empresa.com")
    print(f"Cliente cadastrado com ID #{novo_id}")

🔗 Recursos Pedagógicos do Capítulo 16

Recurso Didático Finalidade Link de Acesso
📊 Slides de Aula Apresentação visual interativa com Dark Mode e suporte a teclado Ver Slides
🧠 Quiz Formativo Teste interativo de fixação com feedback imediato por alternativa Fazer Quiz
💻 Exemplos de Código Demonstrações funcionais com Type Hints e saída no console Ver Exemplos
🧩 Exercícios em 4 Níveis Lista progressiva de fixação com gabarito em bloco colapsável Resolver Exercícios

⚡ Capítulo Anterior 📚 Sumário de Tópicos 🖥️ Próximo Capítulo