Trabalhando com Banco de Dados em Python: Uma Introdução Prática

16/09/2024

1. Por Que Usar Banco de Dados com Python?

Ao desenvolver aplicações, é comum precisar armazenar, recuperar e manipular dados de forma eficiente. Usar um banco de dados oferece uma maneira estruturada de fazer isso. Python oferece suporte para diversos tipos de bancos de dados, como SQLite, MySQL e PostgreSQL, facilitando o gerenciamento de grandes volumes de dados. Além disso, a capacidade de integrar bancos de dados com Python permite o desenvolvimento de aplicações complexas de forma rápida e escalável.

2. Conectando-se a um Banco de Dados Relacional

Existem várias bibliotecas que permitem a conexão de Python com bancos de dados. Para este artigo, utilizaremos o sqlite3, que é embutido no Python, e o mysql-connector-python, uma biblioteca popular para trabalhar com MySQL. Vamos começar com o SQLite, um banco de dados leve e ideal para projetos menores ou testes.

2.1. Usando SQLite

O SQLite é integrado ao Python, então não é necessário instalar bibliotecas externas. Vamos ver como conectar-se a um banco de dados SQLite e realizar operações básicas.

# Exemplo de conexão com SQLite
import sqlite3

# Conectando ao banco de dados (ou criando um novo se não existir)
conexao = sqlite3.connect('meu_banco.db')

# Criando um cursor para executar comandos SQL
cursor = conexao.cursor()

# Criando uma tabela
cursor.execute('''CREATE TABLE IF NOT EXISTS usuarios (
                    id INTEGER PRIMARY KEY,
                    nome TEXT,
                    idade INTEGER
                )''')

# Inserindo um registro
cursor.execute("INSERT INTO usuarios (nome, idade) VALUES (?, ?)", ('Ana', 28))

# Confirmando a transação
conexao.commit()

# Fechando a conexão
conexao.close()

Este exemplo cria uma tabela de usuários no banco de dados meu_banco.db e insere um registro. O método commit() é usado para salvar as alterações no banco de dados, e close() encerra a conexão.

2.2. Usando MySQL

Para conectar Python a um banco de dados MySQL, primeiro você precisa instalar o pacote mysql-connector-python.

# Instalando o conector MySQL
pip install mysql-connector-python
# Exemplo de conexão com MySQL
import mysql.connector

# Conectando ao banco de dados MySQL
conexao = mysql.connector.connect(
    host="localhost",
    user="root",
    password="minhasenha",
    database="meu_banco"
)

cursor = conexao.cursor()

# Criando uma tabela
cursor.execute('''CREATE TABLE IF NOT EXISTS clientes (
                    id INT AUTO_INCREMENT PRIMARY KEY,
                    nome VARCHAR(255),
                    email VARCHAR(255)
                )''')

# Inserindo um registro
cursor.execute("INSERT INTO clientes (nome, email) VALUES (%s, %s)", ('Carlos', 'carlos@example.com'))

# Confirmando a transação
conexao.commit()

# Fechando a conexão
conexao.close()

O MySQL é ideal para projetos de maior escala, e com o mysql-connector-python, você pode gerenciar tabelas, inserir dados e realizar consultas SQL de forma eficiente.

3. Consultando e Manipulando Dados

Uma vez que o banco de dados esteja configurado, você precisará consultar os dados e realizar operações como atualização e exclusão. Veja como realizar essas operações usando o SQLite.

3.1. Consultando Dados

# Consultando registros
conexao = sqlite3.connect('meu_banco.db')
cursor = conexao.cursor()

cursor.execute("SELECT * FROM usuarios")
usuarios = cursor.fetchall()

for usuario in usuarios:
    print(usuario)

conexao.close()

O método fetchall() retorna todos os registros da consulta SQL. Se você quiser apenas um registro, pode usar fetchone().

3.2. Atualizando e Excluindo Dados

# Atualizando um registro
conexao = sqlite3.connect('meu_banco.db')
cursor = conexao.cursor()

cursor.execute("UPDATE usuarios SET idade = ? WHERE nome = ?", (29, 'Ana'))
conexao.commit()

# Excluindo um registro
cursor.execute("DELETE FROM usuarios WHERE nome = ?", ('Ana',))
conexao.commit()

conexao.close()

Atualizar e excluir dados no banco é feito usando comandos SQL padrão, seguidos pelo método commit() para aplicar as mudanças no banco de dados.

4. Usando ORM com SQLAlchemy

Para quem deseja uma abordagem mais abstrata, o SQLAlchemy é uma biblioteca que oferece um mapeamento objeto-relacional (ORM), facilitando o trabalho com bancos de dados sem precisar escrever SQL diretamente.

# Instalando SQLAlchemy
pip install sqlalchemy
# Exemplo básico com SQLAlchemy
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# Configurando o banco de dados
engine = create_engine('sqlite:///meu_banco_orm.db')
Base = declarative_base()

# Definindo uma classe que mapeia para uma tabela
class Usuario(Base):
    __tablename__ = 'usuarios'
    id = Column(Integer, primary_key=True)
    nome = Column(String)
    idade = Column(Integer)

# Criando as tabelas no banco de dados
Base.metadata.create_all(engine)

# Criando uma sessão para interagir com o banco
Session = sessionmaker(bind=engine)
session = Session()

# Inserindo um registro
novo_usuario = Usuario(nome='Maria', idade=32)
session.add(novo_usuario)
session.commit()

# Consultando registros
usuarios = session.query(Usuario).all()
for usuario in usuarios:
    print(usuario.nome, usuario.idade)

Com o SQLAlchemy, você pode mapear classes Python diretamente para tabelas no banco de dados, tornando o código mais legível e fácil de manter.

Conclusão

Trabalhar com bancos de dados em Python é uma tarefa simples e eficiente, graças à variedade de bibliotecas disponíveis. Desde a simplicidade do SQLite até a robustez do MySQL, você pode gerenciar dados facilmente, realizar consultas SQL e até utilizar ORMs como SQLAlchemy para tornar o desenvolvimento mais ágil. Escolha a abordagem que melhor se adapta ao seu projeto e comece a integrar bancos de dados com Python de forma eficiente.