SQLite3: Trabalhando com SQLite em Python de forma integrada

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao SQLite e ao módulo sqlite3

O SQLite é um sistema de gerenciamento de banco de dados relacional compacto que não requer a instalação de um servidor separado, sendo ideal para o desenvolvimento de projetos pequenos e médios. Em Python, o suporte ao SQLite é implementado através do módulo integrado sqlite3, permitindo trabalhar com bancos de dados sem instalar bibliotecas adicionais.

O módulo sqlite3 transforma a criação e o uso de bancos de dados em um processo semelhante ao trabalho com arquivos comuns. Esta solução é especialmente valiosa para prototipagem, sistemas embarcados, aplicativos desktop e fins educacionais.

Instalação e compatibilidade

O módulo sqlite3 está incluído na biblioteca padrão do Python desde a versão 2.5 e está disponível sem instalação adicional. Ele oferece total compatibilidade com os sistemas operacionais Windows, macOS e Linux, fornecendo uma interface para trabalhar com o SQLite versão 3.

import sqlite3

Conectando ao banco de dados e criando uma conexão

Criando um banco de dados em arquivo

conn = sqlite3.connect('meu_banco.db')

Ao executar este comando, o banco de dados será criado automaticamente se o arquivo especificado não existir.

Criando um banco de dados em memória

conn = sqlite3.connect(':memory:')

Esta opção é especialmente útil para testes e operações temporárias.

Parâmetros adicionais de conexão

conn = sqlite3.connect('database.db', 
                      check_same_thread=False,
                      detect_types=sqlite3.PARSE_DECLTYPES)

Criando tabelas e trabalhando com o esquema de dados

Criando tabelas

cursor = conn.cursor()
cursor.execute('''
    CREATE TABLE usuarios (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nome TEXT NOT NULL,
        idade INTEGER,
        email TEXT UNIQUE,
        criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )
''')
conn.commit()

Tipos de dados no SQLite

O SQLite suporta cinco tipos principais de dados:

  • INTEGER - números inteiros
  • REAL - números de ponto flutuante
  • TEXT - strings de texto
  • BLOB - dados binários
  • NULL - ausência de valor

O SQLite usa tipagem dinâmica, o que oferece flexibilidade, mas exige atenção ao trabalhar com os dados.

Operações CRUD (Create, Read, Update, Delete)

Inserindo dados

# Inserindo um registro
cursor.execute("INSERT INTO usuarios (nome, idade, email) VALUES (?, ?, ?)", 
               ("João Silva", 30, "joao@exemplo.com"))

# Inserindo vários registros
dados_usuarios = [
    ("Maria Santos", 25, "maria@exemplo.com"),
    ("Pedro Oliveira", 35, "pedro@exemplo.com"),
    ("Ana Costa", 28, "ana@exemplo.com")
]
cursor.executemany("INSERT INTO usuarios (nome, idade, email) VALUES (?, ?, ?)", dados_usuarios)
conn.commit()

Consultando dados

# Selecionando todos os registros
cursor.execute("SELECT * FROM usuarios")
todos_usuarios = cursor.fetchall()

# Selecionando com condição
cursor.execute("SELECT nome, idade FROM usuarios WHERE idade > ?", (25,))
usuarios_adultos = cursor.fetchall()

# Selecionando com ordenação
cursor.execute("SELECT * FROM usuarios ORDER BY idade DESC")
usuarios_ordenados = cursor.fetchall()

Atualizando dados

cursor.execute("UPDATE usuarios SET idade = ? WHERE nome = ?", (31, "João Silva"))
conn.commit()

# Obtendo o número de linhas alteradas
print(f"Linhas atualizadas: {cursor.rowcount}")

Excluindo dados

cursor.execute("DELETE FROM usuarios WHERE nome = ?", ("Ana Costa",))
conn.commit()
print(f"Linhas excluídas: {cursor.rowcount}")

Transações e controle de alterações

Por padrão, o sqlite3 opera no modo de transação automática, onde cada comando DML é confirmado imediatamente. Para maior controle, você pode gerenciar transações manualmente:

try:
    conn.execute("BEGIN")
    cursor.execute("UPDATE usuarios SET idade = 40 WHERE nome = 'João Silva'")
    cursor.execute("DELETE FROM usuarios WHERE nome = 'Maria Santos'")
    conn.commit()
    print("Transação concluída com sucesso!")
except Exception as e:
    conn.rollback()
    print(f"Erro na transação: {e}")

Otimização de desempenho

Usando executemany para inserções em lote

dados = [(f"Usuário {i}", i * 5) for i in range(1000)]
cursor.executemany("INSERT INTO usuarios (nome, idade) VALUES (?, ?)", dados)
conn.commit()

Desativando a sincronização para operações em massa

conn.execute("PRAGMA synchronous = OFF")
conn.execute("PRAGMA journal_mode = MEMORY")

Usando índices para acelerar consultas

cursor.execute("CREATE INDEX idx_email ON usuarios (email)")

Integração com Pandas

import pandas as pd

# Lendo dados do SQLite para um DataFrame
df = pd.read_sql_query("SELECT * FROM usuarios", conn)

# Escrevendo um DataFrame no SQLite
df.to_sql('usuarios_pandas', conn, if_exists='replace', index=False)

Fazendo backup do banco de dados

import shutil
shutil.copy2('meu_banco.db', 'backup_meu_banco.db')

Para bancos de dados em uso, utilize a função de backup integrada:

backup_conn = sqlite3.connect('backup.db')
conn.backup(backup_conn)
backup_conn.close()

Conclusão

O módulo sqlite3 do Python é uma ferramenta poderosa e versátil para gerenciar bancos de dados locais. Com ele, você pode criar aplicações completas sem depender de servidores externos, ideal para projetos que exigem simplicidade e portabilidade. Pratique os exemplos deste guia e explore mais recursos para dominar o SQLite em Python!

Recommendations