Exemple #1
0
def eliminarElemento(elementoRelacional, parametrosJSON):
  cur = mysql.cursor()
  if (not pimcBD.tablaExiste(elementoRelacional)):
    raise ValueError("elementoRelacional No Existe")
    return None
  if (not isinstance(parametrosJSON, dict)):
    raise ValueError("parametrosJSON no es dictionario")
    return None
  if (parametrosJSON == {}):
    raise ValueError("parametrosJSON vacios")
    return None
  
  idElementoRelacional = pimcBD.obtenerTablaId(elementoRelacional)
  if idElementoRelacional:
    if idElementoRelacional in parametrosJSON:
      idValor = parametrosJSON[idElementoRelacional]
      # Inicializamos la consulta
      query = '''DELETE FROM %s WHERE %s = %d '''
      try:
        numEntradasBorradas = cur.execute(query % (elementoRelacional, idElementoRelacional, int(idValor)))
        mysql.commit()
        return numEntradasBorradas
      except (MySQLdb.Error, MySQLdb.Warning) as e:
        raise ValueError("MYSQL ERROR = ", str(e))
        return None
    else:
      raise ValueError("ID Invalido para elemento relacional")
      return None
  else:
    raise ValueError("ID invalido para elemento relacional")
    return None
Exemple #2
0
def modificarElemento(elementoRelacional, parametrosJSON):
    cur = mysql.cursor()
    if (not pimcBD.tablaExiste(elementoRelacional)):
        raise ValueError("elementoRelacional No Existe")
        return None
    if (not isinstance(parametrosJSON, dict)):
        raise ValueError("parametrosJSON no es dictionario")
        return None
    if (parametrosJSON == {}):
        raise ValueError("parametrosJSON vacios")
        return None

    idElementoRelacional = pimcBD.obtenerTablaId(elementoRelacional)
    idValor = None
    # Inicializamos la consulta
    query = '''UPDATE ''' + str(elementoRelacional) + ''' SET '''
    camposBD = pimcBD.obtenerCamposTabla(elementoRelacional)
    argumentosBD = []

    for campo in camposBD:
        if campo in parametrosJSON:
            if (campo == idElementoRelacional):
                idValor = parametrosJSON[campo]
            else:
                argumentosBD.append(parametrosJSON[campo])
                query = query + str(campo) + ' =  %s , '

    if idValor == None:
        raise ValueError("No se envio llave primaria para modificar")
        return None

    if len(argumentosBD) == 0:
        raise ValueError("No se enviaron parametros para modificar")
        return None

    # borramos la ultima coma Agregamos ID
    query = query[:-2] + " WHERE " + str(idElementoRelacional) + " = %s "
    argumentosBD.append(idValor)

    try:
        #Enviamos consulta
        numAffectedRows = cur.execute(query, argumentosBD)
        mysql.commit()
        return numAffectedRows

    except (MySQLdb.Error, MySQLdb.Warning) as e:
        raise ValueError("MYSQL ERROR (" + query + ") = ", str(e))
Exemple #3
0
 def llenarInformacion(self):
     # Obtenemos todos los nombres de las tablas
     db_cursor = mysql.cursor()
     query = "SHOW TABLES"
     db_cursor.execute(query)
     tablasDB = db_cursor.fetchall()
     # Por cada tabla
     for tabla in tablasDB:
         self.insertarTabla(tabla[0])
         # Obtenemos la llave primaria
         query = "SHOW KEYS FROM " + tabla[0] + " WHERE Key_name = 'PRIMARY'"
         db_cursor.execute(query)
         llave = db_cursor.fetchone()
         self.insertarIdPrincipalTabla(tabla[0], llave[4])
         # Obtenemos los nombres de las columnas
         query = "SHOW COLUMNS FROM " + tabla[0]
         db_cursor.execute(query)
         columnas = db_cursor.fetchall()
         for columna in columnas:
             self.insertarDescripcion(tabla[0], columna[0])
Exemple #4
0
def consultarTodosFiltro(elementoRelacional, parametrosJSON):
  cur = mysql.cursor()
  if (not pimcBD.tablaExiste(elementoRelacional)):
    raise ValueError("elementoRelacional No Existe")
    return None

  camposBD = pimcBD.obtenerCamposTabla(elementoRelacional)
  argumentosBD = []
  # Inicializamos la consulta
  query = '''SELECT * FROM ''' + elementoRelacional + ''' WHERE ( '''
  
  hayParametros = False
  for campo in camposBD:
    if campo in parametrosJSON:
      hayParametros = True
      if isinstance(parametrosJSON[campo],str) :
        query = query + str(campo) + ' LIKE %s OR '
        argumentosBD.append("%"+parametrosJSON[campo]+"%")
      else:
        query = query + str(campo) + ' = %s OR '
        argumentosBD.append(parametrosJSON[campo])

  if hayParametros:
    query = query[:-3] + ' )' # quitamos el ultimo or y cerramos los parentesis
 
  if not (hayParametros):
    # si no se encontraron ninguno de los dos simplificamos la consulta
    query = '''SELECT * FROM ''' + elementoRelacional
  
  try:
    cur.execute(query, argumentosBD)
    rv = cur.fetchall()
    if (len(rv) != 0):
      columns = cur.description
      result = [{columns[index][0]:column for index, column in enumerate(value)} for value in rv]
      return result
    else:
      return {}
  except (MySQLdb.Error, MySQLdb.Warning) as e:
    raise ValueError("MYSQL ERROR = ", str(e))
    return None
Exemple #5
0
def consultarElemento(elementoRelacional, parametrosJSON):
  cur = mysql.cursor()
  if (not pimcBD.tablaExiste(elementoRelacional)):
    raise ValueError("elementoRelacional No Existe")
    return None
  if (not isinstance(parametrosJSON, dict)):
    raise ValueError("parametrosJSON no es dictionario")
    return None
  if (parametrosJSON == {}):
    raise ValueError("parametrosJSON vacios")
    return None
  
  idElementoRelacional = pimcBD.obtenerTablaId(elementoRelacional)
  if idElementoRelacional:
    if idElementoRelacional in parametrosJSON:
      idValor = parametrosJSON[idElementoRelacional]
      # Inicializamos la consulta
      query = '''SELECT * FROM %s WHERE %s = %d '''
      try:
        cur.execute(query % (elementoRelacional, idElementoRelacional, int(idValor)))
        rv = cur.fetchall()
        if (len(rv) != 0):
          columns = cur.description
          result = [{columns[index][0]:column for index, column in enumerate(value)} for value in rv]
          return result
        else:
          return {}
      except (MySQLdb.Error, MySQLdb.Warning) as e:
        raise ValueError("MYSQL ERROR = ", str(e))
        return None
    else:
      raise ValueError("ID Invalido para elemento relacional")
      return None
  else:
    raise ValueError("ID invalido para elemento relacional")
    return None
Exemple #6
0
def consultarTodosFiltroAvanzado(elementoRelacional, parametrosJSON):
  ''' Esta consulta permite realizar consultas de la manera
      (campo=x OR campo=y) AND (campo=z AND campo=w). Los parametros
      en la consulta deberian estar en dos diccionarios. Filtros y 
      restricciones. El primero corresponde a los filtros usados
      en la parte de OR, y el segundo a las restricciones usadas en la
      parte del AND
  '''
  cur = mysql.cursor()
  if (not pimcBD.tablaExiste(elementoRelacional)):
    raise ValueError("elementoRelacional No Existe")
    return None
  
  camposBD = pimcBD.obtenerCamposTabla(elementoRelacional)
  argumentosBD = []
  # Inicializamos la consulta
  query = '''SELECT * FROM ''' + elementoRelacional + ''' WHERE ( '''
  
  hayFiltros = False
  if 'filtros' in parametrosJSON and isinstance(parametrosJSON['filtros'], dict):
    filtros = parametrosJSON['filtros']
    for campo in camposBD:
      if campo in filtros:
        hayFiltros = True
        if isinstance(filtros[campo],str) :
          query = query + str(campo) + ' LIKE %s OR '
          argumentosBD.append("%" + filtros[campo] + "%")
        else:
          query = query + str(campo) + ' = %s OR '
          argumentosBD.append(filtros[campo])

  if hayFiltros:
    query = query[:-3] # quitamos el ultimo or y cerramos los parentesis
 
  #revisamos si hay restricciones
  hayRestricciones = False
  if 'restricciones' in parametrosJSON and isinstance(parametrosJSON['restricciones'], dict):
    if hayFiltros:
      query = query + ') AND (' # Agregamos un and y un parentesis para agregar las restricciones
    restricciones = parametrosJSON['restricciones']
    for campo in camposBD: 
      if campo in restricciones:
        hayRestricciones = True
        if isinstance(restricciones[campo],str) :
          query = query + str(campo) + ' LIKE %s AND '
          argumentosBD.append("%" + restricciones[campo] + "%")
        else:
          query = query + str(campo) + ' = %s AND '
          argumentosBD.append(restricciones[campo])
    
    if not hayRestricciones and hayFiltros:
      # Si no hay restricciones agregadas quitamos el ' AND (' del principio
      query = query[:-7]
    else:
      # si hay restricciones, quitamos el ultimo AND
      query = query[:-4]

  #cerramos el parentesis
  query = query + ' )'

  if not (hayFiltros or hayRestricciones):
    raise ValueError("No se enviaron ni filtros ni restricciones")

  try:
    print (query)
    cur.execute(query, argumentosBD)
    rv = cur.fetchall()
    if (len(rv) != 0):
      columns = cur.description
      result = [{columns[index][0]:column for index, column in enumerate(value)} for value in rv]
      return result
    else:
      return {}
  except (MySQLdb.Error, MySQLdb.Warning) as e:
    raise ValueError("MYSQL ERROR = ", str(e))
    return None
Exemple #7
0
def insertarNuevoElemento(elementoRelacional, parametrosJSON):
    cur = mysql.cursor()
    if (not pimcBD.tablaExiste(elementoRelacional)):
        raise ValueError("elementoRelacional No Existe")
        return None
    if (not isinstance(parametrosJSON, dict)):
        raise ValueError("parametrosJSON no es dictionario")
        return None
    if (parametrosJSON == {}):
        raise ValueError("parametrosJSON vacios")
        return None

    # Inicializamos la consulta
    query = '''INSERT INTO ''' + str(elementoRelacional) + '''('''
    camposBD = pimcBD.obtenerCamposTabla(elementoRelacional)

    # Revisamos que algo se haya insertado
    insertado = False

    # Llenamos los campos
    for campo in camposBD:
        if campo in parametrosJSON:
            query = query + str(campo) + ", "

    # Para los valores
    query = query[:-2] + ") VALUES("

    for campo in camposBD:
        if campo in parametrosJSON:
            insertado = True
            if isinstance(parametrosJSON[campo], str):
                query = query + '"' + parametrosJSON[campo] + '"' + ', '
            else:
                query = query + str(parametrosJSON[campo]) + ', '

    # borramos la ultima coma
    query = query[:-2] + ')'

    if insertado:
        try:
            #Enviamos consulta
            numAffectedRows = cur.execute(query)
            mysql.commit()
            if numAffectedRows == 0:
                raise ValueError("Algo salio mal")
                return None

            #Obtanemos el elemento insertado
            query = "SELECT LAST_INSERT_ID()"
            idElementoRelacional = pimcBD.obtenerTablaId(elementoRelacional)

            if idElementoRelacional != None:
                cur.execute(query)
                rv = cur.fetchall()
                if (len(rv) != 0):
                    for row in rv:
                        nuevoID = row[0]
                    query = "SELECT * FROM " + str(
                        elementoRelacional) + " WHERE " + str(
                            idElementoRelacional) + " = " + str(nuevoID)
                    cur.execute(query)
                    rv = cur.fetchall()
                    columns = cur.description
                    result = [{
                        columns[index][0]: column
                        for index, column in enumerate(value)
                    } for value in rv]
                    return result
                else:
                    raise ValueError("Error obteniendo LAST_INSERTED_ID")
                    return None
            else:
                raise ValueError("Error idElementoRelacional No existe")
        except (MySQLdb.Error, MySQLdb.Warning) as e:
            raise ValueError("MYSQL ERROR = ", str(e))
            return None
    else:
        raise ValueError("No se enviaron elementos")
        return None