diff --git a/exercicios/para-casa/DesafioDaSemana.py b/exercicios/para-casa/DesafioDaSemana.py new file mode 100644 index 0000000..2924e26 --- /dev/null +++ b/exercicios/para-casa/DesafioDaSemana.py @@ -0,0 +1,131 @@ +import sqlite3 +import csv + + + +# **Criação do Banco de Dados e Tabela** +def criar_banco_tabela(): + + conn = sqlite3.connect('Livraria.db') + cursor = conn.cursor() + cursor.execute( + """CREATE TABLE IF NOT EXISTS livros ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + titulo TEXT NOT NULL, + autor TEXT NOT NULL, + ano TEXT NOT NULL, + preco REAL + )""" + ) + + conn.commit() + conn.close() + +# **Importação de Dados de um CSV** +def ler_csv(): + + conn = sqlite3.connect('Livraria.db') + cursor = conn.cursor() + with open('livros.csv', newline='', encoding='UTF-8') as csv_file: + leitor = csv.reader(csv_file) + # Pula a primeira linha + next(leitor) + for linha in leitor: + cursor.execute(''' + INSERT INTO livros (titulo, autor, ano, preco) + VALUES (?, ?, ?, ?) + ''', (linha[0], linha[1], linha[2], linha[3])) + + conn.commit() + conn.close() + + +# **Consulta e Exibição de Dados** + +def Consultar_Visualizar(): + conn = sqlite3.connect('Livraria.db') + cursor = conn.cursor() + cursor.execute('SELECT * FROM livros') + livros = cursor.fetchall() + for livro in livros: + print(livro) + + conn.close() + +# **Atualização de Dados** + +def Atualizar_Preco(): + + conn = sqlite3.connect('Livraria.db') + cursor = conn.cursor() + id_livro = int(input("Digite o id do livro a ter o preço modificado: ")) + novo_preco = float(input("Digite o novo valor para o livro: ")) + + cursor.execute("UPDATE livros SET preco = ? WHERE id = ?", (novo_preco, id_livro)) + + cursor.execute("SELECT * FROM livros") + # 'cursor.fetchall()' - Percorre todos os registros resultantes da última instrução SQL + livros = cursor.fetchall() + for livro in livros: + print(livros) + + conn.commit() + conn.close() + +# **Remoção de Dados** + +def Remover_livros(): + conn = sqlite3.connect('Livraria.db') + cursor = conn.cursor() + id_livro = int(input("Digite o id do livro a ser removido: ")) + + cursor.execute("DELETE FROM livros WHERE id = ?", (id_livro,)) + + cursor.execute("SELECT * FROM livros") + # 'cursor.fetchall()' - Percorre todos os registros resultantes da última instrução SQL + livros = cursor.fetchall() + for livro in livros: + print(livro) + + conn.commit() + conn.close() + +# **Exportação de Dados para CSV** + +def exportar_para_csv(): + conn = sqlite3.connect('Livraria.db') + cursor = conn.cursor() + cursor.execute('SELECT * FROM livros') + livros = cursor.fetchall() + + conn.close() + + with open('exportados_livros.csv', 'w', newline='', encoding='UTF-8') as csv_file: + writer = csv.writer(csv_file) + writer.writerow(['id', 'titulo', 'autor', 'ano', 'preco']) + for livro in livros: + writer.writerows([str(valor) for valor in livro[1:]]) + + print("Dados exportados.") + + +# Executando todas as etapas + +def main(): + criar_banco_tabela() + ler_csv() + + print("\nOs livros disponíveis são:") + Consultar_Visualizar() + + Atualizar_Preco() + Remover_livros() + + exportar_para_csv() + print('\n***************************') + print("\nDados exportados para arquivo csv.") + +if __name__ == "__main__": + main() + + diff --git a/exercicios/para-casa/Livraria.db b/exercicios/para-casa/Livraria.db new file mode 100644 index 0000000..3eb219a Binary files /dev/null and b/exercicios/para-casa/Livraria.db differ diff --git a/exercicios/para-casa/exportados_livros.csv b/exercicios/para-casa/exportados_livros.csv new file mode 100644 index 0000000..038e5aa --- /dev/null +++ b/exercicios/para-casa/exportados_livros.csv @@ -0,0 +1,109 @@ +id,titulo,autor,ano,preco +A,s, ,B,r,u,m,a,s, ,d,e, ,A,v,a,l,o,n + ,M,a,r,i,o,n, ,Z,., ,B,r,a,d,l,e,y + ,2,0,0,1 +1,3,1,.,9,2 +M,u,l,h,e,r,e,s, ,q,u,e, ,C,o,r,r,e,m, ,c,o,m, ,L,o,b,o,s + ,C,l,a,r,i,s,s,a, ,P,í,n,k,o,l,a, ,E,s,t,é,s + ,2,0,1,8 +6,7,.,5 +A, ,B,r,u,x,a, ,d,e, ,P,o,r,t,o, ,B,e,l,o + ,P,a,u,l,o, ,C,o,e,l,h,o + ,2,0,0,6 +1,3,.,0 +A,m,o,r, ,d,e, ,R,e,d,e,n,ç,ã,o + ,F,r,a,n,c,i,n,e, ,R,i,v,e,r,s + ,1,9,9,1 +5,6,.,6,2 +A, ,c,a,s,a, ,d,o,s, ,B,u,d,a,s, ,D,i,t,o,s,o,s + ,J,o,ã,o, ,U,b,a,l,d,o, ,R,i,b,e,i,r,o + ,1,9,9,9 +2,0,.,0 +M,e,n,t,e,s, ,P,e,r,i,g,o,s,a,s + ,A,n,a, ,B,e,a,t,r,i,z, ,B,a,r,b,o,s,a, ,S,i,l,v,a + ,2,0,0,8 +5,0,.,8,8 +A,s, ,B,r,u,m,a,s, ,d,e, ,A,v,a,l,o,n + ,M,a,r,i,o,n, ,Z,., ,B,r,a,d,l,e,y + ,2,0,0,1 +1,3,1,.,9,2 +M,u,l,h,e,r,e,s, ,q,u,e, ,C,o,r,r,e,m, ,c,o,m, ,L,o,b,o,s + ,C,l,a,r,i,s,s,a, ,P,í,n,k,o,l,a, ,E,s,t,é,s + ,2,0,1,8 +6,7,.,5 +A, ,B,r,u,x,a, ,d,e, ,P,o,r,t,o, ,B,e,l,o + ,P,a,u,l,o, ,C,o,e,l,h,o + ,2,0,0,6 +1,3,.,0 +A,m,o,r, ,d,e, ,R,e,d,e,n,ç,ã,o + ,F,r,a,n,c,i,n,e, ,R,i,v,e,r,s + ,1,9,9,1 +5,6,.,6,2 +A, ,c,a,s,a, ,d,o,s, ,B,u,d,a,s, ,D,i,t,o,s,o,s + ,J,o,ã,o, ,U,b,a,l,d,o, ,R,i,b,e,i,r,o + ,1,9,9,9 +3,9,.,3,6 +M,e,n,t,e,s, ,P,e,r,i,g,o,s,a,s + ,A,n,a, ,B,e,a,t,r,i,z, ,B,a,r,b,o,s,a, ,S,i,l,v,a + ,2,0,0,8 +2,0,.,0 +A,s, ,B,r,u,m,a,s, ,d,e, ,A,v,a,l,o,n + ,M,a,r,i,o,n, ,Z,., ,B,r,a,d,l,e,y + ,2,0,0,1 +1,3,1,.,9,2 +M,u,l,h,e,r,e,s, ,q,u,e, ,C,o,r,r,e,m, ,c,o,m, ,L,o,b,o,s + ,C,l,a,r,i,s,s,a, ,P,í,n,k,o,l,a, ,E,s,t,é,s + ,2,0,1,8 +6,7,.,5 +A, ,B,r,u,x,a, ,d,e, ,P,o,r,t,o, ,B,e,l,o + ,P,a,u,l,o, ,C,o,e,l,h,o + ,2,0,0,6 +1,3,.,0 +A,m,o,r, ,d,e, ,R,e,d,e,n,ç,ã,o + ,F,r,a,n,c,i,n,e, ,R,i,v,e,r,s + ,1,9,9,1 +5,6,.,6,2 +A, ,c,a,s,a, ,d,o,s, ,B,u,d,a,s, ,D,i,t,o,s,o,s + ,J,o,ã,o, ,U,b,a,l,d,o, ,R,i,b,e,i,r,o + ,1,9,9,9 +3,9,.,3,6 +A,s, ,B,r,u,m,a,s, ,d,e, ,A,v,a,l,o,n + ,M,a,r,i,o,n, ,Z,., ,B,r,a,d,l,e,y + ,2,0,0,1 +1,3,1,.,9,2 +M,u,l,h,e,r,e,s, ,q,u,e, ,C,o,r,r,e,m, ,c,o,m, ,L,o,b,o,s + ,C,l,a,r,i,s,s,a, ,P,í,n,k,o,l,a, ,E,s,t,é,s + ,2,0,1,8 +6,7,.,5 +A, ,B,r,u,x,a, ,d,e, ,P,o,r,t,o, ,B,e,l,o + ,P,a,u,l,o, ,C,o,e,l,h,o + ,2,0,0,6 +1,3,.,0 +A,m,o,r, ,d,e, ,R,e,d,e,n,ç,ã,o + ,F,r,a,n,c,i,n,e, ,R,i,v,e,r,s + ,1,9,9,1 +5,6,.,6,2 +A, ,c,a,s,a, ,d,o,s, ,B,u,d,a,s, ,D,i,t,o,s,o,s + ,J,o,ã,o, ,U,b,a,l,d,o, ,R,i,b,e,i,r,o + ,1,9,9,9 +3,9,.,3,6 +A,s, ,B,r,u,m,a,s, ,d,e, ,A,v,a,l,o,n + ,M,a,r,i,o,n, ,Z,., ,B,r,a,d,l,e,y + ,2,0,0,1 +1,3,1,.,9,2 +M,u,l,h,e,r,e,s, ,q,u,e, ,C,o,r,r,e,m, ,c,o,m, ,L,o,b,o,s + ,C,l,a,r,i,s,s,a, ,P,í,n,k,o,l,a, ,E,s,t,é,s + ,2,0,1,8 +6,7,.,5 +A, ,B,r,u,x,a, ,d,e, ,P,o,r,t,o, ,B,e,l,o + ,P,a,u,l,o, ,C,o,e,l,h,o + ,2,0,0,6 +1,3,.,0 +A,m,o,r, ,d,e, ,R,e,d,e,n,ç,ã,o + ,F,r,a,n,c,i,n,e, ,R,i,v,e,r,s + ,1,9,9,1 +5,6,.,6,2 +A, ,c,a,s,a, ,d,o,s, ,B,u,d,a,s, ,D,i,t,o,s,o,s + ,J,o,ã,o, ,U,b,a,l,d,o, ,R,i,b,e,i,r,o + ,1,9,9,9 +3,9,.,3,6 diff --git a/exercicios/para-casa/livros.csv b/exercicios/para-casa/livros.csv new file mode 100644 index 0000000..4cf4cea --- /dev/null +++ b/exercicios/para-casa/livros.csv @@ -0,0 +1,7 @@ +titulo, autor, ano, preco +As Brumas de Avalon, Marion Z. Bradley, 2001, 131.92 +Mulheres que Correm com Lobos, Clarissa Pínkola Estés, 2018, 67.50 +A Bruxa de Porto Belo, Paulo Coelho, 2006, 13.00 +Amor de Redenção, Francine Rivers, 1991, 56.62 +A casa dos Budas Ditosos, João Ubaldo Ribeiro, 1999, 39.36 +Mentes Perigosas, Ana Beatriz Barbosa Silva, 2008, 50.88 \ No newline at end of file diff --git a/exercicios/para-sala/csv/1.Leitura.py b/exercicios/para-sala/csv/1.Leitura.py new file mode 100644 index 0000000..2a84800 --- /dev/null +++ b/exercicios/para-sala/csv/1.Leitura.py @@ -0,0 +1,6 @@ +import csv + +with open('produtos.csv', newline='', encoding='UTF-8') as csvfile: + leitor = csv.reader(csvfile) + for linha in leitor: + print(linha) \ No newline at end of file diff --git a/exercicios/para-sala/csv/2.Escrita.py b/exercicios/para-sala/csv/2.Escrita.py new file mode 100644 index 0000000..e3bae1c --- /dev/null +++ b/exercicios/para-sala/csv/2.Escrita.py @@ -0,0 +1,12 @@ +import csv + +novos_dados = [ + [6, 'Carlota', 'Financeiro'], + [7, 'Joaquina', 'TI'], + [8, 'Bianca', 'RH'] +] + +with open('funcionarios.csv', 'w', newline='', encoding='utf-8') as csvfile: + escritor = csv.writer(csvfile) + escritor.writerow(['id', 'nome', 'departamento']) + escritor.writerows(novos_dados) \ No newline at end of file diff --git a/exercicios/para-sala/clientes.csv b/exercicios/para-sala/csv/clientes.csv similarity index 100% rename from exercicios/para-sala/clientes.csv rename to exercicios/para-sala/csv/clientes.csv diff --git a/exercicios/para-sala/csv/funcionarios.csv b/exercicios/para-sala/csv/funcionarios.csv new file mode 100644 index 0000000..079fa9e --- /dev/null +++ b/exercicios/para-sala/csv/funcionarios.csv @@ -0,0 +1,4 @@ +id,nome,departamento +6,Carlota,Financeiro +7,Joaquina,TI +8,Bianca,RH diff --git a/exercicios/para-sala/produtos.csv b/exercicios/para-sala/csv/produtos.csv similarity index 100% rename from exercicios/para-sala/produtos.csv rename to exercicios/para-sala/csv/produtos.csv diff --git a/exercicios/para-sala/exemplo/exemplo.db b/exercicios/para-sala/exemplo/exemplo.db new file mode 100644 index 0000000..eb9a6f5 Binary files /dev/null and b/exercicios/para-sala/exemplo/exemplo.db differ diff --git a/exercicios/para-sala/exemplo/script01.py b/exercicios/para-sala/exemplo/script01.py new file mode 100644 index 0000000..863ccb9 --- /dev/null +++ b/exercicios/para-sala/exemplo/script01.py @@ -0,0 +1,24 @@ +import sqlite3 + +conn = sqlite3.connect("exemplo.db") +cursor = conn.cursor() +cursor.execute(""" + CREATE TABLE IF NOT EXISTS usuarios ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + nome TEXT NOT NULL, + idade INTEGER NOT NULL + ) +""") + +# cursor.execute("INSERT INTO usuarios (nome, idade) VALUES ('João', 25)") +# cursor.execute("INSERT INTO usuarios (nome, idade) VALUES ('Maria', 20)") +# cursor.execute("INSERT INTO usuarios (nome, idade) VALUES ('Chico', 40)") +# cursor.execute("INSERT INTO usuarios (nome, idade) VALUES ('Buarque', 21)") + +cursor.execute("SELECT * FROM usuarios") +registros = cursor.fetchall() +for registro in registros: + print(registro) + +conn.commit() +conn.close() \ No newline at end of file diff --git a/exercicios/para-sala/exercicio/1.CriandoBanco.py b/exercicios/para-sala/exercicio/1.CriandoBanco.py new file mode 100644 index 0000000..b32a610 --- /dev/null +++ b/exercicios/para-sala/exercicio/1.CriandoBanco.py @@ -0,0 +1,28 @@ +# Importando o módulo 'sqlite3', para trabalhar com BD SQLite em Python. +import sqlite3 + +# Criando uma variável para conexão do python ao BD SQLite +conn = sqlite3.connect('escola.db') + +# Criando o cursor (variável) +# O método 'cursor' (conn.cursor) permite executar comandos SQL e recuperar resultados de consultas +cursor = conn.cursor() + +# Execução dos comandos SQL +# 'cursor.execute() - Executa a instrução SQL; +cursor.execute(""" + CREATE TABLE IF NOT EXISTS estudantes ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + nome TEXT NOT NULL, + idade INTEGER NOT NULL + ) +""") + +# Salvando as alterações realizadas +conn.commit() + +# Fecha o cursor +cursor.close() + +# Fechando a conexão com o Banco de dados +conn.close() \ No newline at end of file diff --git a/exercicios/para-sala/exercicio/2. InserindoDados.py b/exercicios/para-sala/exercicio/2. InserindoDados.py new file mode 100644 index 0000000..2b51e3f --- /dev/null +++ b/exercicios/para-sala/exercicio/2. InserindoDados.py @@ -0,0 +1,22 @@ +import sqlite3 + +conn = sqlite3.connect("escola.db") +cursor = conn.cursor() + +dados = [ + ('Maria', 54), + ('Betânia', 25), + ('Julia', 23), + ('Carlos', 18), + ('João', 32), + ('Pedro', 15) +] + +# Executa instrução SQL +# inseri, atualiza ou deleta múltiplos registros de uma só vez, +# É utilizado para não fazer isso um por um com várias chamados ao 'cursor.execute()'. +cursor.executemany("INSERT INTO estudantes (nome, idade) VALUES (?, ?)", dados) + +conn.commit() +cursor.close() +conn.close() \ No newline at end of file diff --git a/exercicios/para-sala/exercicio/3.ConsultandoDados.py b/exercicios/para-sala/exercicio/3.ConsultandoDados.py new file mode 100644 index 0000000..00b3ad0 --- /dev/null +++ b/exercicios/para-sala/exercicio/3.ConsultandoDados.py @@ -0,0 +1,22 @@ +# Crie um script que selecione e exiba todos os registros da tabela `estudantes`. + +import sqlite3 + +conn = sqlite3.connect("escola.db") +cursor = conn.cursor() + +nome = input("Digite o nome que deseja consultar: ") + +cursor.execute("SELECT nome FROM estudantes WHERE nome = ?", (nome, )) +registros = cursor.fetchall() +for registro in registros: + print(registro) + +cursor.close() +conn.close() + + + + + +# (1, 'Maria', 18,) == 'Maria' \ No newline at end of file diff --git a/exercicios/para-sala/exercicio/4.AtualizandoDados.py b/exercicios/para-sala/exercicio/4.AtualizandoDados.py new file mode 100644 index 0000000..3523257 --- /dev/null +++ b/exercicios/para-sala/exercicio/4.AtualizandoDados.py @@ -0,0 +1,21 @@ +import sqlite3 + +conn = sqlite3.connect('escola.db') +cursor = conn.cursor() + +id = input("Digite o ID do estudante que deseja atualizar: ") +novo_nome = input("Digite o novo nome: ") +nova_idade = int(input("Digite a nova idade: ")) + +cursor.execute("UPDATE estudantes SET nome = ?, idade = ? WHERE id = ?", (novo_nome, nova_idade, id)) + +cursor.execute("SELECT * FROM estudantes") +# 'cursor.fetchall()' - Percorre todos os registros resultantes da última instrução SQL +registros = cursor.fetchall() +for registro in registros: + print(registro) + +conn.commit() +cursor.close() +conn.close() + diff --git a/exercicios/para-sala/exercicio/5.RemovendoDados.py b/exercicios/para-sala/exercicio/5.RemovendoDados.py new file mode 100644 index 0000000..37929bd --- /dev/null +++ b/exercicios/para-sala/exercicio/5.RemovendoDados.py @@ -0,0 +1,15 @@ +import sqlite3 + +conn = sqlite3.connect('escola.db') +cursor = conn.cursor() + +cursor.execute("DELETE FROM estudantes WHERE nome = ?", ('Julia',)) + +cursor.execute("SELECT * FROM estudantes") +registros = cursor.fetchall() +for registro in registros: + print(registro) + +conn.commit() +cursor.close() +conn.close() \ No newline at end of file diff --git a/exercicios/para-sala/exercicio/escola.db b/exercicios/para-sala/exercicio/escola.db new file mode 100644 index 0000000..21364df Binary files /dev/null and b/exercicios/para-sala/exercicio/escola.db differ diff --git a/exercicios/para-sala/funcionarios.csv b/exercicios/para-sala/funcionarios.csv deleted file mode 100644 index ecfc643..0000000 --- a/exercicios/para-sala/funcionarios.csv +++ /dev/null @@ -1,6 +0,0 @@ -id,nome,departamento -1,Ana,Financeiro -2,Carlos,TI -3,Beatriz,RH -4,Daniel,Marketing -5,Elisa,Vendas