Banco de dados sqlite com Python
OBS:
Olá! Esta é minha primeira postagem na plataforma. Na verdade, é minha primeira postagem informativa que publico em qualquer plataforma. Nunca fui de publicar nada que envolva meus conhecimentos, talvez por medo de ser julgado ou falta do que realmente postar. Mas ao ouvir sobre a premissa desta plataforma, tive que vir contribuir de alguma forma. Senti que eu devia fazer parte dessa barca. Espero que este post o ajude a entender o funcionamento do sqlite no python, e caso tenha algo a acrescentar, favor deixe nos comentários! Também aceito criticas construtivas ;)
Agora chega de falar de mim, e vamos para o código.
O sqlite
Mas pq logo o sqlite? Bem, gosto de sqlite pela sua simplicidade. Utiliza a linguagem sql (como o próprio nome já diz) e todo o banco fica em um arquivo de extensão ".db". Não é necessário um servidor para operar na base de dados, outro ponto que me atraiu.
Arquivo padrão de sqlite
Criando conexão
Antes de fazer operações no banco, devemos criar uma conexão com o banco. Para isso, primeiro importamos a biblioteca do sqlite e usamos o método connect, passando como parâmetro o caminho para o arquivo do banco ".db".
No exemplo a seguir, criei uma função que retorna uma conexão com o banco, junto com um try para caso haja algum erro no código.
Caso não saiba mexer com caminhos(paths) em python, clique aqui para ler um artigo sobre o mesmo. (Também recomendo aprender a biblioteca .os, que mexe justamente com caminhos, diretórios e essas paradas ;p)
import sqlite3
def conectar(p):
try:
con = sqlite3.connect(p)
return con
except sqlite3.Error as ex:
print(ex)
caminho = ".\\banco\\agenda.db"
conexao = conectar(caminho)
Operando no banco de dados
Na hora de adicionar um registro, deletar, atualizar, e etc, devemos criar um cursor.
Mas Irlan, o que é um cursor?
Um cursor nada mais é do que um objeto vindo da conexão com o banco, que é responsável por executar os comandos sql no banco de dados.
Para criar um cursor, executaremos o seguinte código:
cursor = conexao.cursor()
(A variável não precisa de necessariamente chamada de cursor, mas eu a chamo assim para facilitar a compreensão.)
Criando uma tabela
Com o cursor criado, usamos o método cursor.execute(comando)
vindo do cursor para executar um comando em sql. No nosso caso, iremos criar uma tabela "tb_contatos" em um banco de agenda utilizando o mesmo.
(Para facilitar a compreensão, não utilizarei o try except nos exemplos a seguir. Mas recomendo fortemente que o utilize para corrigir possíveis erros sem muita dor de cabeça.)
import sqlite3
def conectar(p):
con = sqlite3.connect(p)
return con
def criarTabela(con, sql):
cursor = con.cursor()
cursor.execute(sql)
caminhodoBanco = ".\\banco\\agenda.db"
conexao = conectar(caminho)
criarTabelaSql = "CREATE TABLE tb_contatos (id INT PRIMARY KEY AUTOINCREMENT, nome VARCHAR (20), email VARCHAR(30), telefone VARCHAR(15))"
criarTabela(conexao, criarTabelaSql)
Manipulando dados
Ao registrar, atualizar, e deletar dados, a lógica é a mesma. Utilizamos o método cursor.execute(sql).PORÉM, MUITO CUIDADO. Ao utilizar o método execute para alterar qualquer coisa que envolva os dados no banco, precisamos do método commit vindo na conexão para as mudanças permanecerem. Caso contrário, as mudanças não serão feitas.
def conectar(p):
con = sqlite3.connect(p)
return con
def registrar(con, sql):
cursor = con.cursor()
cursor.execute(sql)
con.commit()
caminhodoBanco = ".\\banco\\agenda.db"
conexao = conectar(caminho)
registrarSql = "INSERT INTO tb_contatos (nome, email, telefone) VALUES ('Irlan', '[email protected]', '2069020'))"
registrar(conexao, registrarSql)
Consultar dados
Para fazer uma consulta de dados, a lógica continua a mesma. Porém não será necessário usar o commit, ja que não alterará nada nos dados. Ao invés disso, utilizaremos o .fetchall() que retornará uma lista com as tuplas contendo os dados.
def conectar(p):
con = sqlite3.connect(p)
return con
def consultar(con, sql):
cursor = con.cursor()
cursor.execute(sql)
dados = cursor().fetchall()
return dados
caminhodoBanco = ".\\banco\\agenda.db"
conexao = conectar(caminho)
consultarSql = "SELECT * FROM tb_contatos"
Finalização
Esse é o básico do sqlite para python. Espero ter sido informativo ;) Caso queira, posso criar outra postagem, ou atualizar essa com mais conteúdo sobre o assunto. Obrigado por ler até aqui, até a próxima!
Documentação da biblioteca sqlite3 oficial e em Portugês.