Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] hotelplus.db

1º Criei o "create_hotelplus.py":

import sqlite3

Cria um banco de dados (caso não exista nenhum banco de dados com esse nome ainda) e depois conecta

conn = sqlite3.connect('hotelplus.db')

Para executar comandos no banco de dados vamos precisar de um cursor

cursor = conn.cursor()

Para indicar que o comando é um comando puro de SQL usamos 3 """"

cursor.execute(
"""
CREATE TABLE IF NOT EXISTS usuarios(
id INTEGER PRIMARY KEY,
nome TEXT,
email TEXT
)
"""
)

Para confirmar as alterações

conn.commit()

Fecha o banco de dados

conn.close()


2º Criei o "write_hotelplus.py":

import sqlite3

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

Inserindo valores na tabela usuarios, valores esses nome e e-mail

INJEÇÃO DE SQL: é quando alguém quer roubar ou inserir dados maliciosos no seu banco dados, o VALUES (?,?) serve para proteger

o banco de dados, (?,?) vai mostrar para onde os dados inseridos vão, uma forma de sanitização das informações

cursor.execute(
"""
INSERT INTO usuarios(nome,email)
VALUES (?,?)
""",
("Diogo", "diogo@gmai.com" )
)

OBS: adicionei o usuário "Rodrigo" e o e-mail "rodrigo@gmai.com" antes

conn.commit()
conn.close()


3º Criei o "read_hotelplus":

import sqlite3

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

Comando para consultar dados da tabela usuarios

cursor.execute(
"""
SELECT * FROM usuarios
"""
)

Comando para ler as informações dos usuários

usuarios = cursor.fetchall()

for usuario in usuarios:
print(usuario)
### Aqui usuario deve ficar no singular para ler um usuario de cada vez

conn.close()


A resposta do terminal foi:

(1, 'Rodrigo', 'rodrigo@gmai.com')
(2, 'Diogo', 'diogo@gmai.com')

1 resposta

Olá, Rodrigo! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a biblioteca sqlite3 para criar e manipular um banco de dados com Python, utilizou muito bem a inserção com parâmetros (?, ?) para proteger contra injeção de SQL e ainda compreendeu a importância da consulta e leitura de registros para validar os dados armazenados.

Uma dica interessante para o futuro é encapsular essas operações em funções ou até em uma classe, deixando o código mais organizado e reutilizável. Assim:

import sqlite3

class HotelPlusDB:
    def __init__(self, nome_banco="hotelplus.db"):
        self.nome_banco = nome_banco

    def conectar(self):
        return sqlite3.connect(self.nome_banco)

    def criar_tabela(self):
        with self.conectar() as conn:
            cursor = conn.cursor()
            cursor.execute("""
                CREATE TABLE IF NOT EXISTS usuarios(
                    id INTEGER PRIMARY KEY,
                    nome TEXT,
                    email TEXT
                )
            """)

    def inserir_usuario(self, nome, email):
        with self.conectar() as conn:
            cursor = conn.cursor()
            cursor.execute("INSERT INTO usuarios(nome,email) VALUES (?,?)", (nome, email))

    def listar_usuarios(self):
        with self.conectar() as conn:
            cursor = conn.cursor()
            cursor.execute("SELECT * FROM usuarios")
            return cursor.fetchall()

Isso faz com que você possa chamar métodos como inserir_usuario("Maria", "maria@email.com") sem repetir código em vários arquivos.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Usar with para conexões: garante fechamento automático do banco.
  • Adicionar tratamento de exceções: para lidar com erros de inserção ou conexão.
  • Separar lógica de banco da lógica de interface: deixando o projeto mais modular e escalável.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: você acha que organizar o código em uma classe para centralizar as operações do banco deixaria o projeto mais fácil de expandir ou prefere manter os scripts separados para cada funcionalidade como fez inicialmente?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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