📊 Capítulo 16: Banco de Dados com SQLite3
Especialização em Sistemas com Python
🗺️ O Fluxo Transacional Seguro com SQLite3
sequenceDiagram
autonumber
actor APP as Aplicação Python
participant CONN as sqlite3.connect("banco.db")
participant CUR as Cursor
participant DB as Arquivo de Banco (.db) com WAL Mode
APP->>CONN: with conn: (Inicia transação atômica)
APP->>CUR: cur.execute("INSERT INTO contas VALUES (?, ?)", (1, 500.0))
CUR->>DB: Executa query parametrizada (Proteção anti-SQLi)
Note over APP,CONN: Se o bloco 'with' terminar sem erros:
CONN->>DB: COMMIT automático! ⚡
Note over APP,CONN: Se ocorrer qualquer exceção:
CONN->>DB: ROLLBACK automático! (Reverte tudo sem corromper o banco)
🎯 Slide 1: Parâmetros Seguros (Prepared Statements)
-
❌ Vulnerável a Injeção:
cur.execute(f"SELECT * FROM users WHERE id = '{user_input}'") - ✅ 100% Seguro:
cur.execute("SELECT * FROM users WHERE id = ?", (user_input,))
🎯 Slide 2: Performance Máxima com o Modo WAL
conn = sqlite3.connect("sistema.db")
conn.execute("PRAGMA journal_mode=WAL;") # Write-Ahead Logging
conn.execute("PRAGMA synchronous=NORMAL;")
conn.execute("PRAGMA foreign_keys=ON;") # Ativa integridade referencial!
- O modo WAL permite que múltiplos leitores e um escritor acessem o banco ao mesmo tempo sem bloqueios mútuos!
🎯 Slide 3: Mapeamento com Row Factory
conn.row_factory = sqlite3.Rowpermite acessar colunas tanto por índice numérico quanto pelo nome da coluna como um dicionário (row["nome"])!
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim