Oii, Andressa.
Obrigada por compartilhar. O seu código mostra que você compreendeu a lógica de funcionamento das etapas de conexão, cursor e execução de comandos SQL.
Vou comentar algumas coisas sobre a atividade.
Quando trabalhamos com bancos de dados em Python, seguimos um roteiro que garante a integridade da informação:
- Conexão: Abre o canal de comunicação com o arquivo do banco de dados.
- Cursor: Age como um intermediário que leva seus comandos SQL até o banco e traz os resultados de volta.
- Commit: Confirma as alterações. Sem ele, as inserções de dados são descartadas quando o programa fecha.
- Close: Encerra a comunicação, liberando memória e evitando que o arquivo fique travado.
Refinando o seu código:
Percebi que nos seus scripts de inserção e exibição, você utilizou um caminho absoluto (C:\Users...). Uma forma de deixar o seu sistema mais flexível é utilizar caminhos relativos. Se você nomear o banco apenas como hotel_plus.db, o Python criará o arquivo na mesma pasta onde o seu script tá salvo.
Vou deixar uma ideia pra você do que pode testar no futuro:
import sqlite3
# estabelece a conexão com o arquivo
conexao = sqlite3.connect("hotel_plus.db")
cursor = conexao.cursor()
# criação da tabela com uma trava de segurança (IF NOT EXISTS)
cursor.execute('''
CREATE TABLE IF NOT EXISTS usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
email TEXT NOT NULL
)
''')
# inserção de dois usuários conforme solicitado pelo desafio
# O uso de '?' ajuda a evitar problemas de segurança no banco de dados
dados_usuarios = [
("Andressa Nascimento", "andressanasc32@gmail.com"),
("Carlos Silva", "carlos.silva@email.com")
]
cursor.executemany("INSERT INTO usuarios (nome, email) VALUES (?, ?)", dados_usuarios)
# salva as informações de forma definitiva
conexao.commit()
# Consulta e exibição dos registros
cursor.execute("SELECT * FROM usuarios")
todos_usuarios = cursor.fetchall()
print("Registros encontrados na tabela usuarios:")
for usuario in todos_usuarios:
print(f"ID: {usuario[0]} - Nome: {usuario[1]} - E-mail: {usuario[2]}")
# encerra a conexão
conexao.close()
Detalhes técnicos importantes:
- AUTOINCREMENT: No campo ID, essa instrução retira de você a responsabilidade de digitar o número manualmente. O banco de dados gera o próximo valor disponível sozinho.
- fetchall(): Este método retorna uma lista de tuplas. Cada tupla representa uma linha da sua tabela.
- executemany: Perceba que passei uma lista com dois nomes e e-mails de uma só vez. Isso torna o processamento mais veloz quando você tem muitos dados para cadastrar.
Você concluiu o desafio com sucesso, parabéns!
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!