예제 #1
0
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()
예제 #2
0
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()
예제 #3
0
    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)
예제 #4
0
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)
예제 #5
0
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")
예제 #6
0
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()
예제 #7
0
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)
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
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:
예제 #11
0
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()
예제 #12
0
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)
예제 #13
0
    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()