SQLite3
Nativamente, o Python 3.x possui uma biblioteca para importação do SQLite3, para que possamos manipular esse banco de dados de forma muito fácil através da linguagem. É possível fazer desde a criação do banco, estruturas de tabelas e manipulação de dados.
Os exemplos abaixo são muito simples para que possamos fazer o mínimo de manutenção dos mesmos.
Criação do arquivo e tabelas
O arquivo será a base de dados contendo todoas as tabelas que serão necessárias para o seu projeto.
Abaixo temos o código para que seja criado uma conexão, a crição de uma tabela. O diretório onde se encontrará o arquivo deve existir.
import os
import sqlite3
#excluindo o arquivo de banco de dados
print('Excluindo o arquivo de banco de dados.')
file = 'd:\\Sqlite3\data\mydb.sqlite'
os.remove(file)
# Criando a base de dados
connection = sqlite3.connect('d:\\Sqlite3\data\mydb.sqlite')
# Get a cursor object
cursor = connection.cursor()
#Criacao de tabelas
def create_table():
cursor.execute('CREATE TABLE IF NOT EXISTS cliente \
(id integer PRIMARY KEY, \
nome varchar(40), \
cidade varchar(30), \
salario decimal(10,2))')
create_table()
Excluindo dados de um tabela (todos os dados)
Caso voce não recrie toda vez o arquivo de banco, pelo menos é necessário que limpe os dados para este exemplo, para que não haja chave primaria repetida:
#Excluindo todos os dados caso tenha
cursor.execute("DELETE FROM cliente")
connection.commit()
Adicionando dados na tabela
Temos abaixo o exemplo de fazer a adição de dados através de uma lista de tuplas (vários registros por vez) e a outra de se fazer através de uma tupla (um registro por vez)
#Adicionando dados da tabela
#Referencia: https://docs.python.org/2/library/sqlite3.html
def data_entry():
lista_cli = [(1,'JOSE DA SILVA','JUNDIAI',1500.55),
(2,'ANA MARIA', 'JUNDIAI', 2300.69),
(3,'MARIA DE SOUZA', 'CAMPINAS', 3547.02)]
cursor.executemany("INSERT INTO cliente(id, nome, cidade, salario) \
values (?, ?, ?, ?)", lista_cli)
tupla_cli = (4,'ANTONIO LIMA','VARZEA PAULISTA',1346.22)
cursor.execute("INSERT INTO cliente(id, nome, cidade, salario) \
values (?, ?, ?, ?)", tupla_cli)
connection.commit()
data_entry()
Selecionando dados da tabela retornando 1 linha e várias linhas, e uma linha específica
Abaixo segue códigos fazendo o retorno de uma única linha (a primeira que estiver no dataset, todoas as linhas (usando a função fetchall) e especificando a linha retornada através de um ID.
#Selecionando os dados da tabela
cursor.execute("SELECT id, nome, cidade, salario from cliente")
user1 = cursor.fetchone() #retrieve the first row
print('\nImpressao de campo a campo')
print('Id:', user1[0]) #Imprime o primeiro campo
print('Nome:', user1[1]) #Imprime o segundo campo
print('Cidade:', user1[2]) #Imprime o terceiro campo
print('Salario:', user1[3]) #Imprime o quarto campo
print('\nImpressao de toda as tuplas')
all_rows = cursor.fetchall()
for row in all_rows:
#row[0] retorna a primeira coluna da query (id),
#row[1] retina a segunda coluna (nome)
print('{0}, {1}, {2}, {3}'.format(row[0], row[1], row[2], row[3]))
print('\nSelecionando um ID especifico')
user_id = 3
cursor.execute("SELECT id, nome, cidade, salario from cliente where id = ?", (user_id,))
user = cursor.fetchone()
print('Id:', user[0]) #Imprime o primeiro campo
print('Nome:', user[1]) #Imprime o segundo campo
print('Cidade:', user[2]) #Imprime o terceiro campo
print('Salario:', user[3]) #Imprime o quarto campo
Excluindo um determinado registro específico
O código abaixo apresenta a exclusão específica de um registro através da chave primária (apesar de não ser obrigatório, é o jeito mais aconselhado)
print('\nExcluindo um ID especifico')
#Referencia: https://www.pythoncentral.io/introduction-to-sqlite-in-python/
user_id = 2
cursor.execute("DELETE from cliente where id = ?", (user_id,))
connection.commit()
print('\nImpressao de toda as tuplas')
#Referencia: https://www.pythoncentral.io/introduction-to-sqlite-in-python/
cursor.execute("SELECT id, nome, cidade, salario from cliente")
all_rows = cursor.fetchall()
for row in all_rows:
#row[0] retorna a primeira coluna da query (id),
#row[1] retina a segunda coluna (nome)
print('{0}, {1}, {2}, {3}'.format(row[0], row[1], row[2], row[3]))
Atualização de um camnpo específico
Abaixo é apresentado a atualização de um campo específico através de um id (chave primária). Pode ser atualizado mais de um campo na mesma instrução update.
print('\nAtualizacao de um dado especifico')
user_id = 3
nome_update = 'CARLOS ANDRE'
cursor.execute("UPDATE cliente set nome = ? where id = ?", (nome_update, user_id,))
cursor.execute("SELECT id, nome, cidade, salario from cliente where id = ?", (user_id,))
user = cursor.fetchone()
connection.commit()
print('Id:', user[0]) #Imprime o primeiro campo
print('Nome:', user[1]) #Imprime o segundo campo
print('Cidade:', user[2]) #Imprime o terceiro campo
print('Salario:', user[3]) #Imprime o quarto campo
#Para fechar a conexao
connection.close()
Referencias:
https://www.pythoncentral.io/introduction-to-sqlite-in-python/
https://sebastianraschka.com/Articles/2014_sqlite_in_python_tutorial.html#creating-a-new-sqlite-database
https://www.sqlite.org/datatype3.html
https://www.tutorialspoint.com/sqlite/sqlite_using_joins.htm