Seja muito bem-vindo à Academy Code Christ!
🌍 Academy Code Christ está disponível em vários idiomas.Fique à vontade para usar o tradutor na Barra lateral (Sidebar) e aprender no seu idioma.
Python 🐍 Etapa 13
Bancos de Dados
🎯 O que é um banco de dados?
Ele é composto por tabelas, que contêm colunas (campos) e linhas (registros) — parecidas com uma planilha Excel altamente estruturada.
Tipos principais:
● SQL (relacional) :
○ Usa tabelas com relacionamentos (ex: SQLite, MySQL, PostgreSQL, Oracle, SQL Server).
● NoSQL (não relacional) :
○ Usa formatos mais flexíveis (ex: MongoDB, Redis).
Nesta etapa, focaremos em bancos relacionais SQL e, para os exemplos, usaremos o SQLite, pois ele vem embutido no Python.
Por que usar SQLite?
● Já incluído no Python (sem instalação extra).
● Leve e fácil de usar.
● Cria arquivos .db independentes — perfeitos para testes e pequenos sistemas.
Para projetos maiores, o mesmo código pode ser adaptado para MySQL ou PostgreSQL com pequenas alterações.
Conectando-se a um banco de dados SQLite
Vamos usar o módulo nativo sqlite3.
import sqlite3
# Cria (ou conecta) a um banco de dados
con = sqlite3.connect("empresa.db")
# Cria o cursor para executar comandos SQL
cur = con.cursor()
O arquivo empresa.db será criado automaticamente no diretório do projeto.
Criando uma tabela
cur.execute('''
CREATE TABLE IF NOT EXISTS funcionarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
cargo TEXT,
salario REAL
)
''')
con.commit()
print("Tabela criada com sucesso!")
A tabela funcionarios tem quatro colunas: um id automático, nome, cargo e salário.
Inserindo dados
cur.execute("INSERT INTO funcionarios (nome, cargo, salario) VALUES (?, ?, ?)",
("Ana", "Gerente", 5500.00))
cur.execute("INSERT INTO funcionarios (nome, cargo, salario) VALUES (?, ?, ?)",
("Carlos", "Analista", 4200.00))
con.commit()
print("Registros inseridos!")
O uso de ? evita ataques de SQL injection e permite inserir valores dinamicamente.
Consultando dados
cur.execute("SELECT * FROM funcionarios")
for linha in cur.fetchall():
print(linha)
Saída esperada:
(1, 'Ana', 'Gerente', 5500.0)
(2, 'Carlos', 'Analista', 4200.0)
Filtrando resultados (WHERE)
cur.execute("SELECT * FROM funcionarios WHERE salario > 5000")
resultado = cur.fetchall()
print(resultado)
Saída:
[(1, 'Ana', 'Gerente', 5500.0)]
Atualizando registros (UPDATE)
cur.execute("UPDATE funcionarios SET salario = ? WHERE nome = ?", (6000, "Ana"))
con.commit()
print("Salário atualizado!")
Excluindo registros (DELETE)
cur.execute("DELETE FROM funcionarios WHERE id = ?", (2,))
con.commit()
print("Registro removido!")
Fechando a conexão
con.close()
Sempre feche a conexão quando não estiver mais acessando o banco.
Usando contexto with para segurança
Assim como em arquivos, o sqlite3 também é compatível com blocos with.
import sqlite3
with sqlite3.connect("empresa.db") as con:
cur = con.cursor()
cur.execute("SELECT * FROM funcionarios")
print(cur.fetchall())
O with garante o fechamento e commit automático.
Funções SQL úteis
|
Comando |
Função |
|
AVG() |
média |
|
MIN() |
mínimo |
|
MAX() |
máximo |
|
COUNT() |
contagem |
|
SUM() |
soma |
Exemplo:
cur.execute("SELECT AVG(salario) FROM funcionarios")
print("Média salarial:", cur.fetchone()[0])
Integrando Python + POO com banco de dados
Vamos criar uma classe para gerenciar nossas operações.
import sqlite3
class Banco:
def __init__(self, nome_arquivo):
self.nome = nome_arquivo
self.conn = sqlite3.connect(self.nome)
self.cursor = self.conn.cursor()
def criar_tabela(self):
self.cursor.execute('''
CREATE TABLE IF NOT EXISTS produtos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
preco REAL
)
''')
self.conn.commit()
def inserir(self, nome, preco):
self.cursor.execute("INSERT INTO produtos (nome, preco) VALUES (?, ?)", (nome, preco))
self.conn.commit()
def listar(self):
self.cursor.execute("SELECT * FROM produtos")
return self.cursor.fetchall()
def fechar(self):
self.conn.close()
Uso:
banco = Banco("loja.db")
banco.criar_tabela()
banco.inserir("Notebook", 4200)
banco.inserir("Mouse", 80)
print(banco.listar())
banco.fechar()
Conectando Python ao MySQL (visão geral)
Para sistemas profissionais, o MySQL é uma escolha
comum.
Para isso, instale o conector:
pip install mysql-connector-python
Conexão básica:
import mysql.connector
con = mysql.connector.connect(
host="localhost",
user="root",
password="senha123",
database="empresa"
)
cursor = con.cursor()
cursor.execute("SELECT * FROM funcionarios")
for linha in cursor.fetchall():
print(linha)
Apenas substitua as credenciais e banco correspondentes.
Trabalhando com Pandas e SQL
Pandas integra-se nativamente a bancos, tornando fácil importar dados para análise.
import pandas as pd
import sqlite3
con = sqlite3.connect("empresa.db")
df = pd.read_sql_query("SELECT * FROM funcionarios", con)
print(df)
Você pode gerar gráficos sobre esses dados conforme aprendido no capítulo anterior.
Mini‑projeto prático: Cadastro de clientes com banco de
dados
import sqlite3
def conectar():
return sqlite3.connect("clientes.db")
def criar_tabela():
con = conectar()
cur = con.cursor()
cur.execute('''
CREATE TABLE IF NOT EXISTS clientes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
email TEXT NOT NULL,
telefone TEXT
)
''')
con.commit()
con.close()
def cadastrar(nome, email, telefone):
con = conectar()
cur = con.cursor()
cur.execute("INSERT INTO clientes (nome, email, telefone) VALUES (?, ?, ?)",
(nome, email, telefone))
con.commit()
con.close()
def listar():
con = conectar()
cur = con.cursor()
cur.execute("SELECT * FROM clientes")
for c in cur.fetchall():
print(c)
con.close()
# -------- Programa principal --------
criar_tabela()
while True:
print("\n[1] Cadastrar [2] Listar [3] Sair")
op = input("Opção: ")
if op == "1":
nome = input("Nome: ")
email = input("E-mail: ")
telefone = input("Telefone: ")
cadastrar(nome, email, telefone)
elif op == "2":
listar()
elif op == "3":
print("Encerrando...")
break
else:
print("Opção inválida.")
Tudo o que for cadastrado fica salvo de forma permanente no arquivo clientes.db.
Boas práticas com bancos de dados
1. Feche conexões após concluir o uso.
2. Use transações (commit) apenas quando necessário.
3. Evite SQL Injection → sempre use ? ou parâmetros nomeados.
4. Versione scripts SQL para recriar tabelas facilmente.
5. Crie backups automáticos dos bancos de produção.
6. Monitore erros e utilize logs em todas as operações.
Resumo
Nesta etapa você aprendeu:
✅ O
que é um banco de dados e como ele armazena informações.
✅ Usar o módulo sqlite3 para criar, consultar e
atualizar dados.
✅ Executar comandos SQL diretamente do
Python.
✅ Aplicar conceitos de POO para criar
uma camada de acesso a dados.
✅ Fazer integração entre Pandas
e SQL.
✅ Conectar Python a bancos mais
robustos, como MySQL.
✅ Desenvolver um mini‑sistema completo
de cadastro persistente.
Agora você já tem o conhecimento necessário para construir aplicativos com armazenamento real e integração profissional de dados.
🎯 Na próxima etapa, veremos “Publicação, Testes e Boas Práticas no Desenvolvimento Python”, onde você aprenderá a transformar seus scripts em verdadeiras aplicações distribuíveis, testadas e mantidas com qualidade.

%20-%20Copia.png)
.png)
.png)
.png)
Postar um comentário