Untitled

mail@pastecode.io avatar
unknown
python
a month ago
3.8 kB
2
Indexable
Never
import psycopg2
from psycopg2 import sql
from pprint import pprint


# Conectar-se a um banco de dados PostgreSQL
def conectar_db(nome_db, usuario, senha, host='localhost', port='5432'):
    try:
        conn = psycopg2.connect(
            dbname=nome_db,
            user=usuario,
            password=senha,
            host=host,
            port=port
        )
        return conn
    except psycopg2.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 psycopg2.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 = nome_tabela.replace(' ', '_')
        query = sql.SQL('''
            CREATE TABLE IF NOT EXISTS {} (
                id SERIAL PRIMARY KEY,
                nome VARCHAR(50) NOT NULL,
                cargo VARCHAR(50) NOT NULL,
                data_contratacao DATE NOT NULL
            );
        ''').format(sql.Identifier(nome_tabela))
        cursor.execute(query)
        conn.commit()
        print(f'Tabela {nome_tabela} criada com sucesso!')
    except psycopg2.Error as e:
        print(f'Erro ao criar tabela: {e}')

    fechar_db(conn)


# 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, data_contratacao) VALUES (%s, %s, %s)",
                (nome, cargo, data)
            )
            conn.commit()
            print('Dado inserido com sucesso!')
        except psycopg2.Error as e:
            print(f'Erro ao inserir dado: {e}')

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

        if continuar != 'S':
            break

    fechar_db(conn)


# Listar todos os dados de uma tabela
def listar_funcionarios(conn):
    cursor = conn.cursor()
    try:
        cursor.execute('SELECT * FROM Funcionarios')
        funcionarios = cursor.fetchall()
        pprint(funcionarios)
    except psycopg2.Error as e:
        print(f'Erro ao consultar dados: {e}')


# Atualizar dados na tabela
def atualizar_funcionarios(conn):
    cursor = conn.cursor()
    listar_funcionarios(conn)
    while True:
        ident = input('Digite o ID do funcionário que deseja atualizar: ')
        cargo = input('Digite o novo cargo: ')
        try:
            cursor.execute(
                'UPDATE Funcionarios SET cargo = %s WHERE id = %s',
                (cargo, ident)
            )
            conn.commit()
            print('Dado atualizado com sucesso!')
        except psycopg2.Error as e:
            print(f'Erro ao atualizar dado: {e}')

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

        if continuar != 'S':
            break

    fechar_db(conn)


# 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 = %s', (ident,))
            conn.commit()
            print('Dado excluído com sucesso!')
        except psycopg2.Error as e:
            print(f'Erro ao excluir dado: {e}')

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

        if continuar != 'S':
            break

    fechar_db(conn)
Leave a Comment