Bóson Treinamentos em Ciência e Tecnologia

Criar banco de dados SQLite em Python com sqlite3

Banco de Dados SQLite com Python e módulo sqlite3

Criar banco de dados SQLite em Python com sqlite3

Neste tutorial veremos como criar um banco de dados usando o SGBD SQLite e como acessá-lo para realizar tarefas variadas a partir de um script em Python. Para tal, faremos uso da biblioteca built-in sqlite3, explorando sua funcionalidade básica na criação e acesso a dados armazenados em um banco de dados.

Primeiramente, vamos conceituar o que é o SQLite.

O que é o SQLite

O SQLite é uma biblioteca de software que fornece um sistema de gerenciamento de bancos de dados relacional (SGBDR). Trata-se de uma biblioteca muito leve (daí o termo “lite“) em termos de configuração, administração do BD e recursos necessários.

Presente em todos os smartphones e na maioria dos computadores e outros equipamentos, é software livre e de código aberto.

Site oficial: https://www.sqlite.org/

Características principais do SQLite

O SQLite também tem suporte a subconsultas, transações, junções, pesquisa em texto (full text search), restrições de chave estrangeira, entre outras funcionalidades.

Outros Recursos do SQLite

Observações sobre o SQLite

É importante notar que, por não ter um servidor para seu gerenciamento, o SQLite não provê um acesso direto pela rede. As soluções existentes para acesso remoto são no geral “caras” e ineficientes.

Além disso, o SQLite não possui suporte à autenticação, com usuários e permissões definidas. Estamos falando aqui sobre usuários do banco de dados, que têm permissão para criar tabela, inserir registros etc.

Porém, apesar do SQLite não ter suporte à autenticação, é claro que podemos e devemos implementar nosso próprio controle de acesso para nossa aplicação.

Finalmente, O SQLite é case-insensitive, ou seja, não diferencia letras maiúsculas de minúsculas.

Ferramentas GUI para gerenciamento do SQLite

Diversas ferramentas gráficas existem para auxiliar no gerenciamento de bancos de dados criados com SQLite, disponíveis em várias plataformas e sob vários tipos de licenciamento. Algumas das mais populares incluem o SQLiteStudio, DBeaver e o DB Browser for SQLite, citadas a seguir:

Além do SQLite Studio, também temos disponíveis as seguintes ferramentas GUI gratuitas para SQLite: 

Módulo sqlite3

O módulo SQLite3 é uma biblioteca embutida em Python, compatível com a especificação DB-API 2.0 (descrita pelo PEP 249), que permite a interação com bancos de dados SQLite. Esse módulo fornece uma API simples mas bastante eficaz para realizar operações variadas de consulta, atualização e gerenciamento em bancos de dados SQLite diretamente a partir de scripts Python.

O SQLite3 é amplamente utilizado devido à sua natureza leve, rápida e autônoma. Ele não requer um servidor separado para funcionar, pois todo o banco de dados é armazenado em um único arquivo, o que facilita a distribuição e o compartilhamento de aplicativos.

Além disso, essa biblioteca suporta a maioria das funcionalidades comuns de bancos de dados relacionais, incluindo tipos de dados, consultas SQL complexas, transações ACID (Atomicidade, Consistência, Isolamento e Durabilidade) e outras. Fornece classes e métodos para executar consultas SQL, inserir dados, atualizar registros, excluir dados, gerenciar transações e manipular exceções de maneira eficiente.

Apesar de não ser necessário instalá-lo (por se tratar de um módulo built-in), o módulo sqlite3 requer a versão SQLite 3.7.15 ou mais recente para funcionar.

Como criar um banco de dados SQLite com sqlite3

Para criar um novo banco de dados, ou abrir um banco de dados já existente, o primeiro passo é importar a biblioteca sqlite3 com a declaração import no script Python:

import sqlite3 as s

Logo após, criamos / conectamos um banco de dados usando o método connect() do sqlite3 para criar um objeto de conexão:

conexao = s.connect(banco_teste.db')

Nesta instrução, passamos o nome do banco entre aspas como argumento para o método connect, atribuindo seu retorno a uma variável objeto que batizamos aqui de conexao. Caso o banco de dados não exista, será criado no mesmo diretório onde reside o script python; se já existir, o banco será aberto para acesso. Usaremos o nome banco_teste como nome do banco de dados, com a extensão .db.

Na sequência, criaremos um cursor que nos permitirá executar as declarações SQL no banco de dados em si, como comandos para criar tabelas, inserir registros, atualizar linha e excluir elementos, entre outros. Para isso usamos o método cursor() do objeto conexao criado:

cursor = conexao.cursor()

Agora podemos escrever uma declaração SQL a ser executada no banco. Por exemplo, vamos criar uma tabela usando a declaração CREATE TABLE, e então executar essa declaraçãop no banco de dados usando o método execute() do cursor criado:

sql = "CREATE TABLE teste(coluna1, coluna2, coluna3);"
cursor.execute(sql)

Como estamos executando um comando que realiza alterações no banco de dados, precisamos efetuar um commit logo após para efetivar a transação, caso contrário as alterações requisitadas não serão tornadas permanentes no arquivo do banco. Para isso, executamos o método commit() da conexão:

conexao.commit()

Finalmente, verificamos se a tabela foi criada efetuando uma consulta na tabela mestra do sqlite, que se chama sqlite-master. Usamos na sequência o método fetchall() para acessar todos os registros retornados pela consulta a um objeto batizado de res ( de “resultado”):

res = cursor.execute("SELECT name FROM sqlite_master")
print(res.fetchall())

Código completo:

import sqlite3 as s

# Criar objeto de conexão e conectar ao banco
conexao = s.connect('banco_teste.db')

# Criar cursor
cursor = conexao.cursor()

# Determinar declarações SQL a serem executadas e executá-las no banco
sql = "CREATE TABLE teste(coluna1, coluna2, coluna3);"
cursor.execute(sql)

# Efetivar a transação (comitar)
conexao.commit()

# Verificar se tabelas foram criadas
res = cursor.execute("SELECT name FROM sqlite_master")
print(res.fetchall())

Resultado:

[('teste',)]

Note que foi retornada uma lista de tuplas, com um único elemento, que representa o nome da tabela de teste criada.

É isso aí! Criamos um banco de dados com SQLite e Python, além de uma tabela simples, e testamos a existência da tabela por meio de instruções no script. Na próxima lição veremos como inserir dados nesta tabela (criar registros) e testar essa inserção.

Case prefira, assista a um vídeo da Bóson Treinamentos sobre Python com SQLite:

Sair da versão mobile