CRUD
# Importando os Módulos import sqlite3 from pprint import pprint import datetime # 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}') # Inserindo dados na Tabela def inserir_funcionario(conn): while True: cursor = conn.cursor() while True: nome = input('Digite o nome: ') if nome.strip(): break else: print("O nome não pode estar em branco.") while True: cargo = input('Digite o cargo: ') if cargo.strip(): break else: print("O cargo não pode estar em branco.") while True: data = input('Digite a data de contratação no formato aaaa-mm-dd: ') try: datetime.datetime.strptime(data, '%Y-%m-%d') break except ValueError: print("Data inválida. Por favor, use o 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() # Verificar se há funcionários cadastrados cursor.execute("SELECT COUNT(*) FROM Funcionarios") count = cursor.fetchone()[0] if count == 0: print("Não há funcionários cadastrados.") return listar_funcionarios(conn) while True: ident = input('Digite o ID do funcionário que deseja atualizar: ') # Verificar se o ID informado existe cursor.execute("SELECT COUNT(*) FROM Funcionarios WHERE id = ?", (ident,)) if cursor.fetchone()[0] == 0: print(f"Não foi encontrado um funcionário com o ID {ident}.") continue update_nome = input('Quer atualizar o nome? [S/N] ').upper() if update_nome == 'S': while True: nome = input('Digite o novo nome: ') if nome.strip(): break else: print("O nome não pode estar em branco.") else: nome = None update_cargo = input('Quer atualizar o cargo? [S/N] ').upper() if update_cargo == 'S': while True: cargo = input('Digite o novo cargo: ') if cargo.strip(): break else: print("O cargo não pode estar em branco.") else: cargo = None update_data = input('Quer atualizar a data de contratação? [S/N] ').upper() if update_data == 'S': while True: data = input('Digite a nova data de contratação no formato aaaa-mm-dd: ') try: datetime.datetime.strptime(data, '%Y-%m-%d') break except ValueError: print("Data inválida. Por favor, use o 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)) if cursor.rowcount > 0: conn.commit() print('Dado atualizado com sucesso!') else: print(f'Não foi encontrado um funcionário com o ID {ident}.') 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 # Excluir dados de uma tabela def excluir_funcionario(conn): cursor = conn.cursor() # Verificar se há funcionários cadastrados cursor.execute("SELECT COUNT(*) FROM Funcionarios") count = cursor.fetchone()[0] if count == 0: print("Não há funcionários cadastrados.") return 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,)) if cursor.rowcount > 0: conn.commit() print('Dado excluído com sucesso!') else: print(f'Não foi encontrado um funcionário com o ID {ident}.') # Verificar se ainda há funcionários cadastrados cursor.execute("SELECT COUNT(*) FROM Funcionarios") count = cursor.fetchone()[0] if count == 0: print("Não há mais funcionários cadastrados.") break 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