Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions exercicios/para_casa/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Exercício de Casa 🏠

### Integração Completa de CSV com SQLite usando Python

#### Objetivo

O objetivo deste exercício é praticar a integração de arquivos CSV com um banco de dados SQLite usando Python. Você irá criar um banco de dados, importar dados de um arquivo CSV para uma tabela, realizar operações de CRUD (Create, Read, Update, Delete) e, finalmente, exportar os dados da tabela para um novo arquivo CSV.

#### Descrição do Exercício

1. **Criação do Banco de Dados e Tabela**
- Crie um banco de dados SQLite chamado `livraria.db`.
- Crie uma tabela chamada `livros` com as colunas:
- `id` (INTEGER, chave primária, autoincremento)
- `titulo` (TEXT)
- `autor` (TEXT)
- `ano` (INTEGER)
- `preco` (REAL)

2. **Importação de Dados de um CSV**
- Crie um arquivo CSV chamado `livros.csv` com as colunas `titulo`, `autor`, `ano`, e `preco`.
- Adicione pelo menos 5 registros no arquivo `livros.csv`.
- Escreva um script Python que leia os dados de `livros.csv` e insira-os na tabela `livros`.

3. **Consulta e Exibição de Dados**
- Escreva um script Python que selecione e exiba todos os registros da tabela `livros`.

4. **Atualização de Dados**
- Escreva um script Python que atualize o preço de um livro específico (por exemplo, mude o preço do livro com `id` 1 para 29.99).

5. **Remoção de Dados**
- Escreva um script Python que remova um livro específico da tabela (por exemplo, remova o livro com `id` 3).

6. **Exportação de Dados para CSV**
- Escreva um script Python que exporte os dados da tabela `livros` para um novo arquivo CSV chamado `exportados_livros.csv`.


### Exemplo do arquivo livros.csv

Crie um arquivo CSV chamado `livros.csv` com o seguinte conteúdo:

```csv
titulo,autor,ano,preco
Livro A,Autor A,2020,25.99
Livro B,Autor B,2019,19.99
Livro C,Autor C,2018,29.99
Livro D,Autor D,2021,15.99
Livro E,Autor E,2022,22.99
```


#### Tarefas Adicionais

Para melhorar ainda mais suas habilidades, você pode adicionar as seguintes funcionalidades aos seus scripts:

1. **Validação de Dados**:
- Adicione validações para garantir que os dados lidos do CSV sejam válidos antes de inseri-los no banco de dados.

2. **Manipulação de Exceções**:
- Adicione tratamento de exceções para lidar com possíveis erros durante a leitura, inserção e atualização de dados.

3. **Interatividade**:
- Torne seus scripts interativos, solicitando entradas do usuário para operações como inserção, atualização e remoção de dados.

#### Envio do Exercício

Após completar o exercício, deve ter os seguintes arquivos:
- `criar_banco.py`
- `importar_csv.py`
- `consultar_livros.py`
- `atualizar_livro.py`
- `remover_livro.py`
- `exportar_csv.py`
- `livros.csv`

Certifique-se de testar todos os scripts para garantir que eles funcionam corretamente antes de enviá-los.

Boa sorte!
---

Terminou o exercício? Dá uma olhada nessa checklist e confere se tá tudo certinho, combinado?!

- [ ] Fiz o fork do repositório.
- [ ] Clonei o fork na minha máquina (`git clone url-do-meu-fork`).
- [ ] Resolvi o exercício.
- [ ] Adicionei as mudanças. (`git add .` para adicionar todos os arquivos, ou `git add nome_do_arquivo` para adicionar um arquivo específico)
- [ ] Commitei a cada mudança significativa ou na finalização do exercício (`git commit -m "Mensagem do commit"`)
- [ ] Pushei os commits na minha branch (`git push origin nome-da-branch`)
- [ ] Criei um Pull Request seguindo as orientaçoes que estao nesse [documento](https://github.com/mflilian/repo-example/blob/main/exercicios/para-casa/instrucoes-pull-request.md).
Empty file.
Binary file added exercicios/para_casa/__pycache__/csv.cpython-312.pyc
Binary file not shown.
Binary file not shown.
5 changes: 5 additions & 0 deletions exercicios/para_casa/exportados_livros.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
id,titulo,autor,ano,preco
1,A elite do atraso,Jessé Souza,2017,29.99
2,Sexo no cativeiro,Esther Perel,2018,52.2
4,A coragem de ser imperfeito,Brené Brown,2012,26.79
5,Inteligencia social,Daniel Goleman,2019,53.1
108 changes: 108 additions & 0 deletions exercicios/para_casa/funcoes_livraria.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import sqlite3
import csv


def criar_banco():
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 TEXTE NOT NULL,
ano INTEGER NOT NULL,
preco REAL NOT NULL
)
""")

conn.commit()
cursor.close()
conn.close()
return print("Criação do bando de dados realizada!")


def import_csv():
livros = [
[1, 'A elite do atraso', 'Jessé Souza', 2017, 30.50],
[2, 'Sexo no cativeiro', 'Esther Perel', 2018, 52.20],
[3, 'A vida não é útil', 'Ailton Krenak', 2017, 21.22],
[4, 'A coragem de ser imperfeito', 'Brené Brown', 2012, 26.79],
[5, 'Inteligencia social', 'Daniel Goleman', 2019, 53.10]
]

with open('livros.csv', 'w', newline='', encoding='utf-8') as csvfile:
escritor = csv.writer(csvfile)
escritor.writerow(['id', 'titulo', 'autor', 'ano', 'preco'])
escritor.writerows(livros)

conn = sqlite3.connect('livraria.db')
cursor = conn.cursor()

with open('livros.csv', newline='', encoding='utf-8') as csvfile:
leitor = csv.reader(csvfile)
next(leitor)
for linha in leitor:
cursor.execute("INSERT INTO livros (id, titulo, autor, ano, preco) VALUES (?, ?, ?, ?, ?)",
(linha[0], linha[1], linha[2], linha[3], linha[4]))

conn.commit()
cursor.close()
conn.close()
return print("Importação para arquivo CSV realizada com sucesso.")


def consulta_livros():
conn = sqlite3.connect('livraria.db')
cursor = conn.cursor()

cursor.execute("SELECT * FROM livros")
registros = cursor.fetchall()

for registros in registros:
print(registros)

cursor.close()
conn.close()
return print("Consulta e exbição da biblioteca: ")


def atualizar_livro():
conn = sqlite3.connect('livraria.db')
cursor = conn.cursor()

cursor.execute("UPDATE livros SET preco = 29.99 WHERE id = 1")

conn.commit()
cursor.close()
conn.close()
return print("Dados atualizados.")


def remocao_livro():
conn = sqlite3.connect('livraria.db')
cursor = conn.cursor()

cursor.execute("DELETE FROM livros WHERE id =3")

conn.commit()
cursor.close()
conn.close()
return print("Item excluido.")


def exportar_csv():
conn = sqlite3.connect('livraria.db')
cursor = conn.cursor()

cursor.execute("SELECT * FROM livros")
dados = cursor.fetchall()

with open('exportados_livros.csv', 'w', newline='', encoding='utf-8') as csvflie:
escritor = csv.writer(csvflie)
escritor.writerow(['id', 'titulo', 'autor', 'ano', 'preco'])
escritor.writerows(dados)

cursor.close()
conn.close()
return print("Dados exportado para arquivo CSV.")
31 changes: 31 additions & 0 deletions exercicios/para_casa/instrucoes-pull-request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Como criar meu Pull Request? 🤔

Olá, meninas! <br>
O checklist da atividade ta todo preenchido? Entao agora tá na hora de fazer nosso pull request para o repositório original. <br>
Você deverá navegar até o seu repositório onde você fez o fork e pressionar o botão “New pull request” no lado esquerdo da página. <br> <br>
![alt](https://assets.digitalocean.com/articles/eng_python/PullRequest/PRButton.png)

Você poderá modificar a branch na próxima tela.

Depois de ter escolhido a branch main do repositório original no lado esquerdo, e a nova-branch do seu fork do lado direito, você deve ver uma tela assim:

![alt](https://assets.digitalocean.com/articles/eng_python/PullRequest/PullRequest.png)
<br> <br>
O GitHub vai lhe alertar de que é possível mesclar as duas branches porque não há código concorrente. Você deve adicionar um título, e um comentário descrevendo o seu PR. <br> <br>
DICAS: <br>
1. Você pode seguir esse modelo para o título do seu PR:
```
Nome da Atividade - Seu nome.
```
2. Você pode seguir esse modelo para a descrição do seu PR:
```
O que?
Resolução dos exercícios de lógica.

Como?
* Adicionei um arquivo para resolver a atividade 1 utilizando os métodos slice e split;
* Adicionei casos de testes unitários para cada um dos exercícios utilizando jest;
* Outro ponto que você queira adicionar.
```
Feito isso, é so clicar em “Create pull request”. <br> <br>
Tcharaaaannn! Agora é só esperar a prof revisar seu PR 💜
Binary file added exercicios/para_casa/livraria.db
Binary file not shown.
6 changes: 6 additions & 0 deletions exercicios/para_casa/livros.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
id,titulo,autor,ano,preco
1,A elite do atraso,Jessé Souza,2017,30.5
2,Sexo no cativeiro,Esther Perel,2018,52.2
3,A vida não é útil,Ailton Krenak,2017,21.22
4,A coragem de ser imperfeito,Brené Brown,2012,26.79
5,Inteligencia social,Daniel Goleman,2019,53.1
43 changes: 43 additions & 0 deletions exercicios/para_casa/menu_livraria.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

def menu():
print("Escolha a opção desejada: ")
print("1 - Criar do Banco de Dados e Tabela")
print("2 - Importar dados de um CSV")
print("3 - Consultar e exibir dados")
print("4 - Atualizar dados")
print("5 - Remover dados")
print("6 - Exportar dados para CSV")
print("0 - Sair")


def main():
while True:
menu()
opt = int(input("Digite um número: "))

if opt == 1:
from funcoes_livraria import criar_banco
criar_banco()
elif opt == 2:
from funcoes_livraria import import_csv
import_csv()
elif opt == 3:
from funcoes_livraria import consulta_livros
consulta_livros()
if opt == 4:
from funcoes_livraria import atualizar_livro
atualizar_livro()
elif opt == 5:
from funcoes_livraria import remocao_livro
remocao_livro()
elif opt == 6:
from funcoes_livraria import exportar_csv
exportar_csv()
elif opt == 0:
print("Saindo do programa.")
break
else:
print("Digite uma opção válida.")


main()