O cursor em Python é um objeto que facilita a interação com bancos de dados, permitindo executar comandos SQL e recuperar resultados. Ele atua como um iterador e gerador, mantendo o estado das consultas realizadas. Inicialmente, o cursor não contém dados; após chamadas como fetchone() ou fetchall(), ele retorna tuplas com os registros. Uma característica importante é que o cursor é de uso único: após consumir todos os dados, não pode ser reutilizado para novas consultas, a menos que uma nova operação seja executada.
Para operações com bancos de dados em Python, é comum utilizar bibliotecas que simplificam a interação. O SQLite é uma opção popular por ser leve e integraod ao ecossistema Python através do módulo sqlite3, disponível na biblioteca padrão. Isso permite criar, consultar e modificar bancos de dados de forma eficiente sem dependências externas.
Para começar, importe o módulo e estabeleça uma conexão com o banco de dados. Se o arquivo especificado não existir, ele será criado automaticamente:
import sqlite3
conexao = sqlite3.connect('meubanco.db')
cursor = conexao.cursor()
Crie uma tabela para armazenar dados, definindo colunas e tipos de dados adequados:
cursor.execute("""
CREATE TABLE IF NOT EXISTS usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
email TEXT UNIQUE
)
""")
conexao.commit()
Insira registros na tabela utilizando comandos SQL parametrizados para evitar injeção de SQL:
dados = [('Ana Silva', 'ana@email.com'), ('João Souza', 'joao@email.com')]
cursor.executemany("INSERT INTO usuarios (nome, email) VALUES (?, ?)", dados)
conexao.commit()
Para recuperar dados, execute consultas e use métodos commo fetchone() para obter um único registro ou fetchall() para todos:
cursor.execute("SELECT * FROM usuarios WHERE nome = ?", ('Ana Silva',))
resultado = cursor.fetchone()
print(resultado) # Saída: (1, 'Ana Silva', 'ana@email.com')
Atualize registros existentes modificando campos específicos:
cursor.execute("UPDATE usuarios SET email = 'ana.silva@email.com' WHERE nome = ?", ('Ana Silva',))
conexao.commit()
Remova registros com o comando DELETE, garantindo que as alterações sejam confirmadas:
cursor.execute("DELETE FROM usuarios WHERE nome = ?", ('João Souza',))
conexao.commit()
Ao terminar as operações, feche a conexão para liberar recursos:
conexao.close()
O objeto de conexão gerencia a sessão com o banco de dados e suporta métodos essenciais como commit() para salvar alterações permanentemente e rollback() para desfazer transações pendentes, se disponível. O cursor, por sua vez, mantém o posicionamento durante iterações, permitindo o processamento sequencial dos resultados, mas deve ser recriado para novas consultas após o consumo total dos dados.