def pesquisarCliente(): """ Pesquisar pelo nome do cliente """ # Valor a ser pesquisado pesquisar = editpesquisa.get() try: # Conexção ao Banco de dados conn = ConexaoDB(True).conexao() # tupla nomeada com buffer. cursor = conn.cursor(named_tuple=True) # Montar SQL cursor.execute("SELECT id_clientes, nome_clientes, telefone_clientes, email_clientes " "FROM clientes " "WHERE nome_clientes LIKE %s LIMIT %s;", (f"%{pesquisar}%", 1,)) row = cursor.fetchone() codigo = 0 if cursor.rowcount: labelStatus["text"] = "" codigo = row.id_clientes novoCliente(codigo) editCodigo.configure(state="normal") editCodigo.insert(0, codigo) editCodigo.configure(state="readonly") editNome.insert(0, row.nome_clientes) editFone.insert(0, row.telefone_clientes) editEmail.insert(0, row.email_clientes) else: labelStatus["text"] = "Não existe" labelStatus["font"] = ("Arial", "16", "bold") if codigo: botaoGravar.configure(state="disabled") except Exception as err: labelStatus["text"] = "Ocorreu um erro, desculpe" print(err) else: cursor.close() conn.close()
def excluirCliente(): codigo = editCodigo.get() try: if codigo == "": raise Exception("Faça uma pesquisa") conn = ConexaoDB().conexao() cursor = conn.cursor() sql = """ DELETE FROM clientes WHERE id_clientes = %s; """ val = (codigo,) cursor.execute(sql, val) conn.commit() labelStatus["text"] = "registro deletado." editpesquisa.delete(0, END) # Limpar Campos pesquisarCliente() except Exception as err: labelStatus["text"] = err print(err) else: cursor.close() conn.close()
def validarEntrada(self): u = self.usuario.get() s = self.senha.get() try: cn = ConexaoDB() conn = cn.conexao() c = conn.cursor() sql = """ select id_login from login where user_login = %(usuario)s and password_login = %(senha)s; """ dados = {'usuario': u, 'senha': s} c.execute(sql, dados) c.fetchone() if c.rowcount == 1: self.status['text'] = "Acesso Aprovado" self.master.destroy() abrirSistemaPrincipal() else: self.status['text'] = "Login ou senha inválido." conn.close() except Exception as err: messagebox.showwarning("Error", err)
from include.conexao import ConexaoDB """ A MySQLCursorNamedTuple classe cria um cursor que retorna linhas como namedtuple. Para criar uma MySQLCursorNamedTuplepassagem named_tuple=Truepara o cursor() método do objeto de conexão. """ try: conn = ConexaoDB().conexao() # classe cria um cursor que retorna linhas como namedtuple. cursor = conn.cursor(named_tuple=True) try: # Executar o SQL cursor.execute( "SELECT nome_clientes, telefone_clientes FROM clientes order by nome_clientes LIMIT 1" ) # rowcount iria exibir -1 print("número de linhas (inicial):", cursor.rowcount, end="\n\n\n") # Resultado, processado por Tupla nomeada for row in cursor: print(row) print(row.nome_clientes, row.telefone_clientes) # Exibir numero de linhas existente na tabela print("\n\nnúmero de linhas (inicial):", cursor.rowcount)
from include.conexao import ConexaoDB """ A MySQLCursorDict classe nos permite acessar linhas como dicionários, em vez de uma tupla. """ try: conn = ConexaoDB().conexao() # Resultado retona no formato dicionario cursor = conn.cursor(dictionary=True) try: # Executar o SQL cursor.execute("SELECT nome_clientes, telefone_clientes " "FROM clientes LIMIT 1") # rowcount iria exibir -1 print("número de linhas (inicial):", cursor.rowcount, end="\n\n\n") # Acessando as duas colunas do select for row in cursor: print(row) print(row['nome_clientes'], row['telefone_clientes'], sep=" -- ") # Exibir numero de linhas existente na tabela print("\n\nnúmero de linhas (inicial):", cursor.rowcount) except: raise Exception("Problema para selecionar")
from include.conexao import ConexaoDB """ A MySQLCursorBufferedRaw classe cria um cursor em buffer bruto. """ try: conn = ConexaoDB().conexao() # cursor será bruto e buffered cursor = conn.cursor(raw=True, buffered=True) try: # Executar o SQL cursor.execute("SELECT * FROM clientes LIMIT 3") # rowcount iria exibir -1 print("número de linhas (inicial):", cursor.rowcount, end="\n\n\n") # cursor.fetchall() # Exibir numero de linhas existente na tabela print("\n\nnúmero de linhas (inicial):", cursor.rowcount) except: raise Exception("Problema para selecionar") except Exception as err: print("Erro:", err) else: cursor.close()
from include.conexao import ConexaoDB try: conn = ConexaoDB().conexao() c = conn.cursor() sql = """ INSERT INTO clientes (nome_clientes, telefone_clientes, email_clientes) VALUES (%(nome)s, %(fone)s, %(email)s); """ val = { "nome": "Ivanildo", "fone": "3442-4424", "email": "*****@*****.**" } c.execute(sql, val) conn.commit() print(c.rowcount, "registro inserido.") c.close() conn.close() except Exception as err: print(err)
import mysql.connector from include.conexao import ConexaoDB """ Manipulando vários erros da mesma maneira """ try: conn = ConexaoDB().conexao() cursor = conn.cursor() # A tabela não existe sql = """ select * from tabela_nao_existe limit 5 """ cursor.execute(sql) cursor.close() conn.close() # # Except de varios erros except (mysql.connector.IntegrityError, mysql.connector.DataError) as err: print("IntegrityError or DataError") print(err) except mysql.connector.ProgrammingError as err: print("ProgrammingError") print(err) except mysql.connector.Error as err: print(err)
import mysql.connector from include.conexao import ConexaoDB """ executemany No exemplo do insert ele convete o dicionario em um insert unico Em vez de fazer quatro insert faz um unico sendo muito mais eficiente """ try: db = ConexaoDB().conexao() # return a buffered MySQLCursorNamedTuple cursor = db.cursor(prepared=True) sql1 = """ create temporary table tmp_clientes( id_tmp_clientes int AUTO_INCREMENT PRIMARY KEY, nome_tmp_clientes VARCHAR(100) NOT NULL, idade_tmp_clientes SMALLINT NOT NULL ) """ # # Criar tabela temporaria cursor.execute(sql1) # # SQL para insert sql2 = """ insert into tmp_clientes(nome_tmp_clientes, idade_tmp_clientes) VALUES (%s, %s)
from include.conexao import ConexaoDB """ fetchone() Retorna a próxima linha do conjunto de resultados como tupla. Se não houver mais linhas para recuperar, None será retornado. """ try: cn = ConexaoDB() conn = cn.conexao() c = conn.cursor() try: c.execute("SELECT * FROM clientes limit 5;") print(c.fetchone()) # Retorna uma linha print(c.fetchmany(2)) # Numero de linha que dever retornar print(c.fetchall()) # busca todas as linhas restantes print(c.fetchmany()) # o conjunto de resultados agora está vazio """ Na linha 1, chamamos fetchone() para ler a primeira linha do conjunto de resultados. Em seguida, chamamos fetchmany() para ler as próximas 2 linhas e, finalmente, chamamos fetchall() para buscar a linha restante. O conjunto de resultados está vazio agora, portanto, a próxima chamada para fetchmany() retorna uma lista vazia. """ except: raise Exception("Problema para selecionar") finally: c.close() conn.close() except Exception as err:
def cadastraCliente(): """ Cadastrar As ações Insert e Update São realizadas na mesma função """ codigo = editCodigo.get() codigo = 0 if codigo == "" else int(codigo) nome = editNome.get() fone = editFone.get() email = editEmail.get() if nome == "" or fone == "" or email == "": labelStatus["text"] = "Todos campos são obrigatório" else: try: conn = ConexaoDB().conexao() cursor = conn.cursor() dados = { "id": codigo, "nome": nome, "fone": fone, "email": email } # Mondar INSERT com UPDATE sql = """ INSERT INTO clientes (id_clientes, nome_clientes, telefone_clientes, email_clientes, aniversario_clientes) VALUES (%(id)s, %(nome)s, %(fone)s, %(email)s, NOW()) ON DUPLICATE KEY UPDATE id_clientes = %(id)s, nome_clientes = %(nome)s, telefone_clientes = %(fone)s, email_clientes = %(email)s; """ # print(dados) # print(sql, "\n\n\n\n") cursor.execute(sql, dados) conn.commit() editCodigo.configure(state="normal") editCodigo.delete(0, END) editCodigo.insert(0, cursor.lastrowid) editCodigo.configure(state="readonly") botaoGravar.configure(state="disabled") botaoAlterar.configure(state="normal") botaoExcluir.configure(state="normal") labelStatus["text"] = "Gravado com sucesso!" # # Except de varios erros except (mysql.connector.IntegrityError, mysql.connector.DataError) as err: print("IntegrityError or DataError") print(err) except mysql.connector.ProgrammingError as err: print("ProgrammingError") print(err.errno) print(err.sqlstate) print(err.msg) except mysql.connector.Error as err: print("Error") print(err) else: # novoCliente() cursor.close() conn.close()
import datetime import mysql.connector from include.conexao import ConexaoDB try: conn = ConexaoDB().conexao() cursor = conn.cursor(prepared=True) sql = ( "SELECT nome_clientes, telefone_clientes, email_clientes, aniversario " "FROM clientes " "WHERE aniversario BETWEEN %s AND %s LIMIT 5;") dt_inicio = datetime.date(2019, 7, 1) dt_fim = datetime.date(2020, 7, 31) cursor.execute(sql, (dt_inicio, dt_fim)) # # Retornando as informações para variaveis for (nome, fone, email, niver) in cursor: print("{}, {}, {} {:%d %b %Y}\n".format(nome, fone.rjust(20), email.rjust(20), niver)) cursor.close() conn.close() # # Except de varios erros except (mysql.connector.IntegrityError, mysql.connector.DataError) as err: print("IntegrityError or DataError") print(err)
def conteudo(self, master): frameMid = Frame(master) Label(frameMid, text="Lista de Pessoas", font=("Arial", 15)).grid(row=1, column=1, columnspan=4, pady=5) Label(frameMid, text="Código", relief=RIDGE, width=7, bg="dark grey").grid(row=2, column=1) Label(frameMid, text="Nome", relief=RIDGE, width=30, bg="dark grey").grid(row=2, column=2) Label(frameMid, text="Telefone", relief=RIDGE, width=15, bg="dark grey").grid(row=2, column=3) Label(frameMid, text="E-mail", relief=RIDGE, width=30, bg="dark grey").grid(row=2, column=4) try: conn = ConexaoDB().conexao() cursor = conn.cursor(buffered=True, raw=True) sql = """ select id_clientes, nome_clientes, telefone_clientes, email_clientes from clientes order by id_clientes asc limit 10; """ cursor.execute(sql) contRow = 2 for (codigo, nome, fone, email) in cursor: # print(codigo.decode(), nome.decode(), fone.decode(), email.decode()) corRow = "white" if contRow % 2 == 0 else "light gray" Label(frameMid, text=codigo.decode(), relief=RIDGE, width=7, bg=corRow).grid(row=contRow + 1, column=1) Label(frameMid, text=nome.decode(), relief=RIDGE, width=30, bg=corRow, anchor=W).grid(row=contRow + 1, column=2) Label(frameMid, text=fone.decode(), relief=RIDGE, width=15, bg=corRow).grid(row=contRow + 1, column=3) Label(frameMid, text=email.decode(), relief=RIDGE, width=30, bg=corRow, anchor=E).grid(row=contRow + 1, column=4) contRow += 1 except Exception as err: print("Erro:", err) else: cursor.close() conn.close() frameMid.pack()