Como criar um aplicativo de registro com Python e um banco de dados

Python possui excelente suporte a banco de dados integrado em sua biblioteca padrão, para que você possa criar e interagir com um banco de dados sem depender de estruturas externas como o Django ORM.

SQLite é leve e fácil de integrar com Python. Descubra os princípios básicos da programação de banco de dados em Python com um aplicativo simples de registro de usuário.

Como criar um banco de dados em Python

Para criar e interagir com um banco de dados em Python, você precisa de duas coisas principais: uma conexão e um cursor.

Uma conexão ajuda você a se conectar a um banco de dados existente ou a criar um novo. Veja como criar uma conexão de banco de dados em Python com SQLite:

 import sqlite3


conn = sqlite3.connect('path/to/database.db')


conn.close()

O método connect() segue o caminho para um banco de dados existente. Se não houver banco de dados no caminho especificado, ele criará um. Você deve fechar a conexão com o banco de dados quando terminar de interagir com o banco de dados.

Um cursor ajuda você a interagir com o banco de dados conectado. Você usará um cursor para executar consultas SQL em seu programa Python. Veja como criar um cursor:

 cursor = conn.cursor()


cursor.close()

Você pode criar um cursor chamando o método cursor() em um objeto de conexão aberta.

Como executar uma transação de banco de dados em Python

Usando um cursor, você pode executar instruções SQL, consultas ou scripts para ler ou gravar dados ou alterar a estrutura do banco de dados.

Existem três métodos principais que você pode usar para executar uma transação de banco de dados.

  • Cursor.execute. Este método executará uma única instrução SQL. Veja como você o usa:
     cursor.execute("""
        CREATE TABLE IF NOT EXISTS users (
            name TEXT,
            age INTEGER
        )
    """)

    Este código chama o método execute em um cursor, passando-lhe uma string contendo uma instrução SQL.

  • Cursor.executemany. Este método permite executar a mesma instrução SQL mais de uma vez, com parâmetros diferentes a cada vez. São necessários dois argumentos: a instrução SQL e um iterável. Um bom uso para isso é inserir vários objetos no banco de dados de uma só vez:
     data = [
        ('Alice', 25),
        ('Bob', 30),
        ('Charlie', 22)
    ]

    cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)

    O código acima usa o método executemany para inserir valores no banco de dados várias vezes.

    Note o ? espaços reservados na instrução SQL. O método executemany irá substituí-los pelos valores correspondentes para cada objeto.

  • Cursor.executescript. Como o nome sugere, este método executará um script SQL para você. Você pode escrever suas instruções SQL em um arquivo diferente e executá-las com o método executescript:
     with open("path/to/script.sql") as file:
    sql_script = file.read()

    cursor.executescript(sql_script)

  • Como construir um aplicativo de registro com Python e SQLite3

    A lógica por trás de um aplicativo de registro envolve obter as informações do usuário com Python e armazená-las em um banco de dados. Estas etapas mostrarão como criar um sistema de registro simples com Python e SQLite3.

    Etapa 1: Conecte-se a um banco de dados existente ou crie um novo

    Comece criando um banco de dados para seu aplicativo ou conectando-se a um já existente:

     import sqlite3

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

    cursor = conn.cursor()

    cursor.close()

    conn.close()

    O código acima cria um objeto de conexão e um cursor para interagir com o banco de dados conectado.

    Etapa 2: crie uma tabela para usuários

    Você precisa de uma tabela para armazenar os dados que os usuários fornecerão ao se registrar. Veja como criar um com o cursor:

     cursor.execute("""
        CREATE TABLE IF NOT EXISTS users (
            first_name TEXT,
            last_name TEXT,
            email TEXT UNIQUE,
            password TEXT
        )
    """)

    conn.commit()

    Este código criará uma tabela chamada users se ela não existir em seu banco de dados. Ele cria quatro colunas na tabela para armazenar informações do usuário. O campo de email é exclusivo para evitar que os usuários criem várias contas com o mesmo email.

    A chamada para conn.commit é importante para confirmar a consulta no banco de dados. Sem ele, não haverá alterações no banco de dados.

    Se você usar o método executescript, poderá adicionar a palavra-chave COMMIT no final do arquivo SQL, para não precisar chamar conn.commit.

    Etapa 3: coletar dados do usuário

    As funções Python facilitam a reutilização de código, por isso é uma boa ideia criar uma função para lidar com o recurso de registro. Esta função coleta o nome, sobrenome, e-mail e senha do usuário.

     def register_user():
        first_name = input("Enter your first name: ")
        last_name = input("Enter your last name: ")
        email = input("Enter your email: ")
        password1 = input("Enter your password: ")
        password2 = input("Confirm your password: ")

    Etapa 4: verifique a exatidão da senha

    Modifique a função Register_User para garantir que o usuário insira a mesma senha duas vezes. Caso contrário, você deve solicitar que digitem novamente a senha. Você pode conseguir isso com um loop como este:

     def register_user():
        first_name = input("Enter your first name: ")
        last_name = input("Enter your last name: ")
        email = input("Enter your email: ")

        while True:
            password1 = input("Enter your password: ")
            password2 = input("Confirm your password: ")

            
            if password1 == password2:
                print("You have successfully registered!")
                break
            else:
                print("Your passwords must match")

    Com esta alteração, um usuário não poderá se registrar, a menos que suas senhas correspondam.

    Etapa 5: verifique a exclusividade do e-mail

    A instrução SQL que cria a tabela de usuários define o campo email como exclusivo. Isso significa que o banco de dados retornará um erro se um usuário se inscrever com um email que já existe. Para agir adequadamente, você precisa lidar com a exceção do Python:

     def register_user():
        first_name = input("Enter your first name: ")
        last_name = input("Enter your last name: ")

        while True:
            email = input("Enter your email: ")
            password1 = input("Enter your password: ")
            password2 = input("Confirm your password: ")

            
            if password1 == password2:
                try:
                    print("You have successfully created an account.")
                    break
                except sqlite3.IntegrityError:
                    print("Error: This email is already registered.")
            else:
                print("Your passwords must match.")

    Este código usa o bloco try-except para lidar com o erro que ocorrerá com e-mails duplicados. Se o banco de dados gerar um IntegrityError, o loop while continuará, solicitando que o usuário insira um endereço de e-mail diferente.

    Para este aplicativo de exemplo, é seguro presumir que um IntegrityError ocorrerá apenas como resultado de um endereço de e-mail duplicado. Em um aplicativo real, você provavelmente usará um tratamento de erros mais avançado para resolver outros problemas que possam ocorrer.

    Etapa 6: Insira os dados do usuário no banco de dados

    Agora que você coletou e verificou os dados do usuário, é hora de adicioná-los ao banco de dados. Você pode usar uma consulta SQL para fazer isso. Modifique seu bloco try-except assim:

     try:
        cursor.execute("""
            INSERT INTO users (first_name, last_name, email, password)
            VALUES (?, ?, ?, ?)
        """, (first_name, last_name, email, password2))

        conn.commit()
        print("You have successfully created an account.")
        break
    except sqlite3.IntegrityError:
        print("Error: This email is already registered.")

    No bloco try-except modificado, o cursor executa uma operação de inserção SQL. Finalmente, o método conn.commit confirma a operação SQL no banco de dados.

    Se você seguiu todos os passos acima, deverá ter um aplicativo que registra usuários e os salva no banco de dados. Você pode usar um aplicativo como Navegador de banco de dados para SQLite para visualizar o conteúdo do seu banco de dados:

    Usando bancos de dados em vez de tipos de coleção

    Para bancos de dados simples, pode ser mais fácil criar seu próprio código. Entretanto, à medida que sua aplicação cresce e seu banco de dados se torna mais complexo, considere usar uma ferramenta como Django ORM para simplificar a tarefa.

    Para continuar praticando suas habilidades de banco de dados de baixo nível, tente implementar um sistema de login para complementar o programa de registro.