-
Notifications
You must be signed in to change notification settings - Fork 0
/
PSQL_CRUD.py
153 lines (127 loc) · 11.2 KB
/
PSQL_CRUD.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#-----------------------------------------------------------------------------
#Essa classe possui métodos CRUD >> Create, Read, Update, Delete
#-----------------------------------------------------------------------------
import psycopg2
#-----------------------------------------------------------------------------
# Criação da classe e função '__init__'
#-----------------------------------------------------------------------------
class AppBD:
def __init__(self):
print('Integração GUI-Database Python')
#-----------------------------------------------------------------------------
# Função para conexão com o banco de dados
#-----------------------------------------------------------------------------
def abrirConexao(self):
try: # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
self.connection = psycopg2.connect(user="seu_usuario_aqui",
password="sua_senha_de_usuario_aqui",
host="seu_host_aqui",
port="porta_do_bando_de_dados_aqui",
database="base_de_dados_aqui")
except (Exception, psycopg2.Error) as error : # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
if(self.connection):
print("Falha ao se conectar ao Banco de Dados", error)
#-----------------------------------------------------------------------------
# Função para seleção de todos os produtos
#-----------------------------------------------------------------------------
def selecionarDados(self):
try: # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
self.abrirConexao() # chamar a função de conexão ao banco de dados (sempre deve ser executada antes de um comando SQL)
cursor = self.connection.cursor() # determinar um cursor para o comando SQL (também é obrigatório para execução de comandos SQL)
print("Selecionando todos os produtos")
sql_select_query = """select * from public."PRODUTO"
ORDER BY "CODIGO" ASC """ # Comando SQL que será executado por essa função
cursor.execute(sql_select_query) # execução do comando SQL pelo cursor
registros = cursor.fetchall() # armazenar todos os resultados do comando SQL
print(registros) # Exibir os resultados do comando SQL no terminal
except (Exception, psycopg2.Error) as error: # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
print("Error in select operation", error) # imprimir no terminal o erro encontrado durante o 'try' da função
finally:
# Fechar conexão com o banco de dados (sempre deve ser implementado após os comandos SQL para liberar o banco de dados)
# Como essa função é apenas de seleção de dados, não é necessário realizar 'commit' pois não houve alteração no banco de dados
if (self.connection): # teste de condição - caso a função não tenha feito uma conexão, não será necessário fechar essa conexão
cursor.close() # liberar cursor
self.connection.close() # liberar conexão
print("A conexão com o PostgreSQL foi fechada.")
return registros # retorna os resultados do comando SSQL quando a função 'selecionarDados' for chamada
#-----------------------------------------------------------------------------
# Função para adição de produtos
#-----------------------------------------------------------------------------
def inserirDados(self, codigo, nome, preco):
try: # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
self.abrirConexao() # chamar a função de conexão ao banco de dados (sempre deve ser executada antes de um comando SQL)
cursor = self.connection.cursor() # determinar um cursor para o comando SQL (também é obrigatório para execução de comandos SQL)
postgres_insert_query = """ INSERT INTO public."PRODUTO"
("CODIGO", "NOME", "PRECO") VALUES (%s,%s,%s)""" # Comando SQL que será executado por essa função
record_to_insert = (codigo, nome, preco) # lista das variáveis com os valores que serão inseridos (valores serão atribuidos na criação da GUI)
cursor.execute(postgres_insert_query, record_to_insert) # execução do comando SQL pelo cursor com os valores das variáveis
self.connection.commit() # executar 'commit' do comando para efetuar a respectiva alteração no banco de dados
count = cursor.rowcount # contar a quantidade de linhas o comando 'execute' do cursor criou
print (count, "Registro inserido com successo na tabela PRODUTO") # imprimir no terminal o retorno dos registros alterados
except (Exception, psycopg2.Error) as error : # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
if(self.connection):
print("Falha ao inserir registro na tabela PRODUTO", error) # imprimir no terminal o erro encontrado durante o 'try' da função
finally:
# Fechar conexão com o banco de dados (sempre deve ser implementado após os comandos SQL para liberar o banco de dados)
if(self.connection): # teste de condição - caso a função não tenha feito uma conexão, não será necessário fechar essa conexão
cursor.close() # liberar cursor
self.connection.close() # liberar conexão
print("A conexão com o PostgreSQL foi fechada.")
#-----------------------------------------------------------------------------
# Função para atualização de um produto
#-----------------------------------------------------------------------------
def atualizarDados(self, codigo, nome, preco):
try: # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
self.abrirConexao() # chamar a função de conexão ao banco de dados (sempre deve ser executada antes de um comando SQL)
cursor = self.connection.cursor() # determinar um cursor para o comando SQL (também é obrigatório para execução de comandos SQL)
# serão impressos no terminal os registros ANTES e DEPOIS para possibilitar a visualização da execução da função
print("Registro Antes da Atualização ")
sql_select_query = """select * from public."PRODUTO"
where "CODIGO" = %s""" # Comando SQL que será executado por essa função
cursor.execute(sql_select_query, (codigo,)) # execução do comando SQL pelo cursor
record = cursor.fetchone() # armazenar o resultado do comando SQL
print(record) # Exibir o resultado do comando SQL no terminal
# Atualizar registro
sql_update_query = """Update public."PRODUTO" set "NOME" = %s,
"PRECO" = %s where "CODIGO" = %s""" # Comando SQL que será executado por essa função
cursor.execute(sql_update_query, (nome, preco, codigo)) # execução do comando SQL pelo cursor
self.connection.commit() # executar 'commit' do comando para efetuar a respectiva alteração no banco de dados
count = cursor.rowcount # contar a quantidade de linhas o comando 'execute' do cursor alterou
print(count, "Registro atualizado com sucesso! ") # imprimir no terminal o retorno dos registros alterados
print("Registro Depois da Atualização ")
sql_select_query = """select * from public."PRODUTO"
where "CODIGO" = %s""" # Comando SQL que será executado por essa função
cursor.execute(sql_select_query, (codigo,)) # execução do comando SQL pelo cursor
record = cursor.fetchone() # armazenar o resultado do comando SQL
print(record) # Exibir o resultado do comando SQL no terminal
except (Exception, psycopg2.Error) as error: # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
print("Erro na Atualização", error) # imprimir no terminal o erro encontrado durante o 'try' da função
finally:
# Fechar conexão com o banco de dados (sempre deve ser implementado após os comandos SQL para liberar o banco de dados)
if (self.connection): # teste de condição - caso a função não tenha feito uma conexão, não será necessário fechar essa conexão
cursor.close() # liberar cursor
self.connection.close() # liberar conexão
print("A conexão com o PostgreSQL foi fechada.")
#-----------------------------------------------------------------------------
# Função para a exclusão de um produto
#-----------------------------------------------------------------------------
def excluirDados(self, codigo):
try: # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
self.abrirConexao() # chamar a função de conexão ao banco de dados (sempre deve ser executada antes de um comando SQL)
cursor = self.connection.cursor() # determinar um cursor para o comando SQL (também é obrigatório para execução de comandos SQL)
# Atualizar registro
sql_delete_query = """Delete from public."PRODUTO"
where "CODIGO" = %s""" # Comando SQL que será executado por essa função
cursor.execute(sql_delete_query, (codigo, )) # execução do comando SQL pelo cursor
self.connection.commit() # executar 'commit' do comando para efetuar a respectiva alteração no banco de dados
count = cursor.rowcount # contar a quantidade de linhas o comando 'execute' do cursor excluiu
print(count, "Registro excluído com sucesso! ") # imprimir no terminal o retorno dos registros alterados
except (Exception, psycopg2.Error) as error: # tratamento de erros com 'try' e 'except' é fundamental para criar um programa confiável
print("Erro na Exclusão", error) # imprimir no terminal o erro encontrado durante o 'try' da função
finally:
# Fechar conexão com o banco de dados (sempre deve ser implementado após os comandos SQL para liberar o banco de dados)
if (self.connection): # teste de condição - caso a função não tenha feito uma conexão, não será necessário fechar essa conexão
cursor.close() # liberar cursor
self.connection.close() # liberar conexão
print("A conexão com o PostgreSQL foi fechada.")
#-----------------------------------------------------------------------------