CRUD
unknown
python
10 months ago
8.6 kB
12
Indexable
# 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()Editor is loading...
Leave a Comment