Criar banco de dados SQLite em Python com 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
- Autocontido: O SQLite é independente, o que significa que requer suporte mínimo do sistema operacional ou biblioteca externa. Isso o torna utilizável em qualquer ambiente, especialmente em dispositivos incorporados como iPhones, telefones Android, consoles de jogos, reprodutores de mídia portáteis, etc.
É desenvolvido usando ANSI-C. O código-fonte está disponível nos arquivos sqlite3.c e seu arquivo de cabeçalho sqlite3.h. Se precisarmos desenvolver uma aplicação que utilize SQLite, basta colocar esses arquivos no projeto e compilá-lo com seu código. - Sem servidor (serverless): Normalmente, um SGBDR como MySQL, PostgreSQL, etc., requer um processo de servidor separado para operar. As aplicações que desejam acessar o servidor de banco de dados utilizam o protocolo TCP/IP para enviar e receber solicitações. Isso é chamado de arquitetura cliente/servidor.
Já o SQLite NÃO requer um servidor para funcionar.
O banco de dados SQLite é integrado à aplicação que acessa o banco de dados. Os aplicativos interagem com o banco de dados SQLite lendo e escrevendo diretamente dos arquivos do banco de dados armazenados no disco. - Configuração zero: Devido à arquitetura serverless, não precisamos “instalar” o SQLite antes de usá-lo. Não há nenhum processo do servidor que precise ser configurado, iniciado e interrompido.
Além disso, o SQLite não usa nenhum arquivo de configuração específico. - Transacional: Todas as transações no SQLite são totalmente compatíveis com as propriedades ACID. Isso significa que todas as consultas e alterações são atômicas, consistentes, isoladas e duráveis.
Em outras palavras, todas as alterações em uma transação ocorrem completamente ou não ocorrem, mesmo quando ocorre uma situação inesperada, como falha de aplicativo, falha de energia ou falha do sistema operacional.
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
- O SQLite usa tipos dinâmicos para tabelas. Isso significa podemos armazenar qualquer valor em qualquer coluna, independentemente do tipo de dados.
- Permite que uma única conexão de banco de dados acesse vários arquivos de banco de dados simultaneamente. Isso fornece muitos recursos interessantes, como unir tabelas em bancos de dados diferentes ou copiar dados entre bancos de dados em um único comando.
- O SQLite é capaz de criar bancos de dados na memória de acesso muito rápido.
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:
- SQLiteStudio
O SQLiteStudio é uma ferramenta GUI gratuita para gerenciar bancos de dados SQLite.
É gratuito, portátil, intuitivo e multiplataforma.
A ferramenta também fornece alguns dos recursos mais importantes para trabalhar com bancos de dados SQLite, como importação e exportação de dados em vários formatos, incluindo CSV, XML e JSON.
Download: https://github.com/pawelsalawa/sqlitestudio/releases
Além do SQLite Studio, também temos disponíveis as seguintes ferramentas GUI gratuitas para SQLite:
- DBeaver: Ferramenta gratuita de banco de dados multiplataforma. Suporta todos os principais sistemas de banco de dados relacionais populares como MySQL, PostgreSQL, Oracle Database, IBM DB2, Microsoft SQL Server, Sybase, Firebird, além é claro do SQLite.
Download: https://dbeaver.io/download/ - DB Browser for SQLite: Ferramenta de código aberto para gerenciar arquivos de banco de dados compatíveis com SQLite.
Download: https://sqlitebrowser.org/
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:
Escreva um comentário