1
resposta

[Sugestão] Desafio: Interagindo com banco de dados

import sqlite3

conn=sqlite3.connect("HotelPlus")
cursor=conn.cursor()

cursor.execute(
    '''
CREATE TABLE IF NOT EXISTS usuarios(
   id INTEGER PRIMARY KEY,
   nome TEXT,
   email TEXT
)
'''
)
conn.commit()
conn.close()

Insert_HotelPlus.py

import sqlite3

conn=sqlite3.connect(r"C:\Users\User\Documents\aula_banco_de_dados_r_nr\HotelPlus")
cursor=conn.cursor()

cursor.execute('''
INSERT INTO usuarios (nome,email)\
VALUES(?, ?)
''',("Andressa","andressanasc32@gamil.com") )

conn.commit()
conn.close()

exibir_usuario_Hotelplus.py

import sqlite3

conn=sqlite3.connect(r"C:\Users\User\Documents\aula_banco_de_dados_r_nr\HotelPlus")
cursor=conn.cursor()

cursor.execute('''
SELECT * FROM usuarios
''')
print(cursor.fetchall())
1 resposta

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!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!