コード例 #1
0
#Select com input dos dados sem correr risco de SQL Injection
from mysql.connector.errors import ProgrammingError
from bd import nova_conexao

sql = "SELECT * FROM contatos WHERE nome LIKE %s"

try:
    with nova_conexao() as conexao:
        try:
            entrada = input('Contato a localizar: ')
            args = (f'%{entrada}%', )
            datatable = conexao.cursor()
            datatable.execute(
                sql, args
            )  #Passando as entradas geradas pelo usuário como parâmetro separadamente do comando SQL
            #irá resolver o problema de risco de ataques de SQL Injection
        except ProgrammingError as e:
            print(f'Erro: {e.msg}')
        else:
            for row in datatable:
                print(row)
except ProgrammingError as e:
    print(f'Erro CONEXÃO: {e.msg}')
コード例 #2
0
        nome VARCHAR(50), 
        tel VARCHAR(40)
    )
"""

tabela_emails = """
    CREATE TABLE emails(
        id INT AUTO_INCREMENT PRIMARY KEY,
        dono VARCHAR(50)
    )
"""

# o bloco with é usado para garantir finalização de recursos adquiridos, garantindo que estes
# sejam fechados no momento certo, funciona como uma abreviação do try finally

try:
    with nova_conexao(
    ) as conexao:  # com o with a conexão é finalizada após a execução desse bloco
        # observe que a conexão só é encerrada (o bloco finally de nova_conexão()) após o bloco abaixo ser executado
        # isso ocorre por conta do decorator @contextmanager em conjunto com o with
        try:
            print('try')
            cursor = conexao.cursor()
            cursor.execute(tabela_contatos)
            cursor.execute(tabela_emails)
        except ProgrammingError as e:
            print(f'Erro: {e.msg}')
except ProgrammingError as e:
    # os erros que ocorrem fora do with acima, ou seja dentro arquivo bd.py deve ser tratos aqui
    print(f'Erro de CONEXÃO (bd.py file): {e.msg}')