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 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()
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)
from include.conexao import ConexaoDB """ Por padrão o objeto cursor converte automaticamente os tipos MySQL em seus tipo equivalentes em Python Para que não ocorra isso passe no metodo cursor o valor raw=True """ try: conn = ConexaoDB().conexao() # cursor não processado cursor = conn.cursor(raw=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:
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)
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()
from include.conexao import ConexaoDB """ Neste exemplo utilizando o buffered para obter as informações da tabela O rowcount antes e depois do For ira motrar o mesmo valor total de linha na tabela """ try: conn = ConexaoDB().conexao() # criar um cursor em buffer cursor = conn.cursor(buffered=True) try: # Executar o SQL cursor.execute("SELECT * FROM clientes") # Exibir numero de linhas existente na tabela # Sem o buffer o rowcount iria exibir -1 print("número de linhas (inicial):", cursor.rowcount) # O FOR neste exemplo é só para consumir os dados # Para visualizar os dados é só utilizar print(row) for row in cursor: pass # Exibir numero de linhas existente na tabela print("número de linhas (inicial):", cursor.rowcount) except:
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()
from include.conexao import ConexaoDB """ Semelhante a MySQLCursorNamedTuple mas cria um cursor em buffer. Para criar MySQLCursorBufferedNamedTuple passagem named_tuple=True e buffered=Truepara o cursor() método do objeto de conexão. """ try: conn = ConexaoDB().conexao() # tupla nomeada com buffer. cursor = conn.cursor(named_tuple=True, buffered=True) try: # Executar o SQL cursor.execute( "SELECT nome_clientes, telefone_clientes " "FROM clientes order by nome_clientes LIMIT %s", (2, )) # rowcount iria exibir -1, SEM o buffer print("número de linhas (inicial):", cursor.rowcount, end="\n\n\n") # Resultado, processado por Tupla nomeada for row in cursor: print(row) print("Nome: {}, Telefone: {}".format(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 """ O MySQLCursorBufferedDict funciona exatamente como MySQLCursorDict, mas retorna um cursor em buffer. Para criar a MySQLCursorBufferedDict passagem do cursor buffered=Truee dictionary=True para o cursor() método do objeto de conexão. """ try: conn = ConexaoDB().conexao() # As informações estão em buffe e resultado processado tipo dicionario cursor = conn.cursor(dictionary=True, buffered=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