CRUD

 avatar
unknown
python
a month ago
6.1 kB
3
Indexable
# Importando os Módulos
import sqlite3
from pprint import pprint


# Conectar-se a ou criar um banco de dados
def conectar_db(nome_db):
    try:
        conn = sqlite3.connect(nome_db)
        return conn
    except sqlite3.Error as e:
        print(f'Erro ao conectar-se a base de dados: {e}')


# Fechar conexão com o banco de dados
def fechar_db(conn):
    try:
        if conn:
            conn.close()
            print('Conexão com o banco de dados fechada com sucesso!')
    except sqlite3.Error as e:
        print(f'Erro ao fechar a conexão com o banco de dados: {e}')


# Criar tabela
def criar_tabela(conn):
    cursor = conn.cursor()
    try:
        nome_tabela = input('Digite o nome da tabela: ').capitalize()
        nome_tabela.replace(' ', '_')
        cursor.execute(f"SELECT name FROM sqlite_master WHERE type='table' AND name='{nome_tabela}'")
        if cursor.fetchone():
            print(f'A tabela {nome_tabela} já existe.')
        else:
            cursor.execute(f'''
                CREATE TABLE IF NOT EXISTS {nome_tabela} (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    nome VARCHAR(50) NOT NULL,
                    cargo VARCHAR(50) NOT NULL,
                    dataContratacao VARCHAR(50) NOT NULL
                );
            ''')
            conn.commit()
            print(f'Tabela {nome_tabela} criada com sucesso!')
    except sqlite3.Error as e:
        print(f'Erro ao criar tabela: {e}')



# Inserir dados na tabela
def inserir_funcionario(conn):
    while True:
        cursor = conn.cursor()
        nome = input('Digite o nome: ')
        cargo = input('Digite o cargo: ')
        data = input('Digite a data de contratação no formato aaaa-mm-dd: ')

        try:
            cursor.execute("INSERT INTO Funcionarios (nome, cargo, dataContratacao) VALUES (?, ?, ?)",
                           (nome, cargo, data))
            conn.commit()
            print('Dado inserido com sucesso!')
        except sqlite3.Error as e:
            print(f'Erro ao inserir dado: {e}')

        continuar = input('Deseja continuar? [S/N] ').upper()

        if continuar != 'S':
            break


# Listar todos os dados de uma tabela
def listar_funcionarios(conn):
    cursor = conn.cursor()
    try:
        cursor.execute('SELECT * FROM Funcionarios')
        funcionarios = cursor.fetchall()
        if not funcionarios:
            print("Não há funcionários cadastrados.")
        else:
            print("Lista de funcionários:")
            for funcionario in funcionarios:
                print(f"ID: {funcionario[0]}, Nome: {funcionario[1]}, Cargo: {funcionario[2]}, Data de Contratação: {funcionario[3]}")
    except sqlite3.Error as e:
        print(f'Erro ao consultar dados: {e}')


# Atualizar dados de uma tabela
def atualizar_funcionarios(conn):
    cursor = conn.cursor()
    listar_funcionarios(conn)
    while True:
        ident = input('Digite o ID do funcionário que deseja atualizar: ')

        update_nome = input('Quer atualizar o nome? [S/N] ').upper()
        if update_nome == 'S':
            nome = input('Digite o novo nome: ')
        else:
            nome = None

        update_cargo = input('Quer atualizar o cargo? [S/N] ').upper()
        if update_cargo == 'S':
            cargo = input('Digite o novo cargo: ')
        else:
            cargo = None

        update_data = input('Quer atualizar a data de contratação? [S/N] ').upper()
        if update_data == 'S':
            data = input('Digite a nova data de contratação no formato aaaa-mm-dd: ')
        else:
            data = None

        try:
            if nome is not None or cargo is not None or data is not None:
                cursor.execute('UPDATE Funcionarios SET nome = COALESCE(?, nome), cargo = COALESCE(?, cargo), dataContratacao = COALESCE(?, dataContratacao) WHERE id = ?', (nome, cargo, data, ident))
                conn.commit()
                print('Dado atualizado com sucesso!')
            else:
                print('Nenhum campo foi atualizado.')
        except sqlite3.Error as e:
            print(f'Erro ao atualizar dado: {e}')

        continuar = input('Deseja continuar? [S/N] ').upper()

        if continuar != 'S':
            break



# Deletar dados de uma tabela
def excluir_funcionario(conn):
    cursor = conn.cursor()
    listar_funcionarios(conn)
    while True:
        ident = input('Digite o ID do funcionário que deseja excluir: ')

        try:
            cursor.execute('DELETE FROM Funcionarios WHERE id = ?', (ident,))
            conn.commit()
            print('Dado excluído com sucesso!')
        except sqlite3.Error as e:
            print(f'Erro ao excluir dado: {e}')

        continuar = input('Deseja continuar? [S/N] ').upper()

        if continuar != 'S':
            break

# ============================================================================================================
    
# Função principal
def main():
    conn = conectar_db('funcionarios.db')

    while True:
        print("\nSelecione a operação desejada:")
        print("1. Criar tabela")
        print("2. Inserir funcionário")
        print("3. Listar funcionários")
        print("4. Atualizar funcionário")
        print("5. Excluir funcionário")
        print("6. Sair")

        opcao = input("Digite o número da opção: ")

        if opcao == '1':
            criar_tabela(conn)
        elif opcao == '2':
            inserir_funcionario(conn)
        elif opcao == '3':
            listar_funcionarios(conn)
        elif opcao == '4':
            atualizar_funcionarios(conn)
        elif opcao == '5':
            excluir_funcionario(conn)
        elif opcao == '6':
            fechar_db(conn)
            break
        else:
            print("Opção inválida. Tente novamente.")

if __name__ == "__main__":
    main()
Leave a Comment