def cargarMedicamentos():
    with connection.cursor() as cursor:
        sql = "SELECT `*` FROM `medicamentos`"
        cursor.execute(sql)
        x = cursor.fetchone()
        while (x != None):
            temp = Medicamento()
            cargarObjeto(temp,
                         MEDICAMENTOS,
                         nombre=x['nombre'],
                         descripcion=x['descripcion'],
                         foto=x['foto'],
                         nombreTabla="medicamentos")
            x = cursor.fetchone()
def cargarEnfermedades():
    with connection.cursor() as cursor:
        sql = "SELECT `*` FROM `enfermedad`"
        cursor.execute(sql)
        x = cursor.fetchone()
        while (x != None):
            temp = Enfermedad()
            cargarObjeto(temp,
                         ENFERMEDADES,
                         nombre=x['nombre'],
                         descripcion=x['descripcion'],
                         foto=x['foto'],
                         nombreTabla="enfermedad")
            x = cursor.fetchone()
def cargarAnimales():
    with connection.cursor() as cursor:
        sql = "SELECT `*` FROM `animal`"
        cursor.execute(sql)
        x = cursor.fetchone()
        while (x != None):
            temp = Animal()
            cargarObjeto(temp,
                         ANIMALES,
                         nombre=x['nombre'],
                         descripcion=x['descripcion'],
                         foto=x['foto'],
                         nombreTabla="animal")
            x = cursor.fetchone()
def cargarUsuarios():
    with connection.cursor() as cursor:
        sql = "SELECT `*` FROM `usuario`"
        cursor.execute(sql)
        x = cursor.fetchone()
        while (x != None):
            temp = Usuario()
            cargarObjeto(temp,
                         USERS,
                         username=x['username'],
                         nombre=x['nombre'],
                         passw=x['pass'],
                         foto=x['foto'],
                         admin=x['admin'],
                         nombreTabla="usuario")
            x = cursor.fetchone()
def cargarDosis():
    with connection.cursor() as cursor:
        sql = "SELECT `*` FROM `dosis`"
        cursor.execute(sql)
        x = cursor.fetchone()
        while (x != None):
            temp = Dosis()
            cargarObjeto(temp,
                         DOSIS,
                         id=x['ID'],
                         animal=x['animal'],
                         medicamento=x['medicamento'],
                         enfermedad=x['enfermedad'],
                         rangoPeso=x['rangoPeso'],
                         dosis=x['dosis'],
                         nombreTabla="dosis")
            x = cursor.fetchone()
def deleteSQL(nombreTable, where):
    '''
    :param nombreTable: nombre exacto de la tabla
    :param where: claves-valor ; ejemplo ["username" , %s, "Rata Blanca"]. El valor es una lista
    :return:
    '''
    with connection.cursor() as cursor:
        sql = "DELETE FROM " + nombreTable + " WHERE " + str(
            where[0]) + "=" + str(where[1])
        try:
            cursor.execute(sql, (where[2]))
            connection.commit()
        except pymysql.err.ProgrammingError as error:
            codigo, msj = error.args
            print("Error en MySQL. Codigo de error -> ", codigo, " Mensaje ->",
                  msj)
            return False
def cargarPrescripciones():
    with connection.cursor() as cursor:
        sql = "SELECT `*` FROM `prescripcion`"
        cursor.execute(sql)
        x = cursor.fetchone()
        while (x != None):
            temp = Prescripcion()
            cargarObjeto(temp,
                         PRESCRIPCIONES,
                         id=x['id'],
                         usuario=x['usuario'],
                         animal=x['animal'],
                         enfermedad=x['enfermedad'],
                         peso=x['peso'],
                         dosis=x['dosis'],
                         nombreTabla="prescripcion")
            x = cursor.fetchone()
def insertarSQL(nombreTabla, **valores):
    '''
    :param nombreTabla: nombre exacto de la tabla en donde se va a insertar
    :param valores: claves-valor ; ejemplo username = [%s, "Rata Blanca"]. El valor es una lista
    la primera posicion es el tipo de dato la segunda el dato.
    :return:
    '''
    keys = [k for k in valores.keys()]
    with connection.cursor() as cursor:
        sql = "INSERT INTO " + nombreTabla + " (" + reduce(lambda x, y: x + "," + y, keys) \
              + ") " + "VALUES (" + reduce(lambda x, y: x + "," + y, [valores[i][0] for i in keys]) + ")"
        print(sql)
        tupla = tuple([valores[i][1] for i in valores])
        try:
            cursor.execute(sql, tupla)
            connection.commit()
        except pymysql.err.ProgrammingError as error:
            codigo, msj = error.args
            print("Error en MySQL. Codigo de error -> ", codigo, " Mensaje ->",
                  msj)
            return False
def updateSQL(nombreTabla, where, **valores):
    '''
    :param nombreTabla: nombre exacto de la tabla
    :param valores: claves-valor ; ejemplo ["username", %s, "Rata Blanca"]. El valor es una lista, nombre de columna en comillas
    :param where: tupla ; ejemplo (username, %s , "Rata Blanca")
    :return: False en caso de error
    '''
    keys = [k for k in valores.keys()]
    concatenar = lambda x: reduce(
        lambda a, b: a + "," + b,
        list(map(lambda a: a + "=" + valores[a][0], x)))
    with connection.cursor() as cursor:
        sql = "UPDATE " + nombreTabla + " SET " + concatenar(
            keys) + " WHERE " + str(where[0]) + "=" + str(where[1])
        tupla = tuple([valores[i][1] for i in valores] + [where[2]])
        try:
            cursor.execute(sql, tupla)
            connection.commit()
        except pymysql.err.ProgrammingError as error:
            codigo, msj = error.args
            print("Error en MySQL. Codigo de error -> ", codigo, " Mensaje ->",
                  msj)
            return False