Capítulo 16: Acesso a Dados Relacionais com SQLite3 Nativo, Transações ACID e DAO
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:gerenciacommitautomático ourollbackem 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 |