def eliminar(cls, persona): with CursorDelPool() as cursor: logger.debug(cursor.mogrify(cls.__ELIMINAR)) logger.debug(f'Persona a eliminar: {persona}') values = (persona.get_id_persona()) cursor.execute(cls.__ELIMINAR, values) return cursor.rowcount
def actualizar(cls, persona): with CursorDelPool() as cursor: logger.debug(cursor.mogrify(cls.__ACTUALIZAR)) logger.debug(f'Persona a actualizar: {persona}') values = (persona.get_nombre(), persona.get_apellido(), persona.get_email(), persona.get_id_persona()) cursor.execute(cls.__ACTUALIZAR, values) return cursor.rowcount
def insertar(cls, persona): with CursorDelPool() as cursor: logger.debug(cursor.mogrify(cls.__INSERTAR)) logger.debug(f'Persona a insertar: {persona}') values = (persona.get_nombre(), persona.get_apellido(), persona.get_email()) cursor.execute(cls.__INSERTAR, values) return cursor.rowcount
def seleccionar(cls): with CursorDelPool() as cursor: logger.debug(cursor.mogrify(cls.__SELECCIONAR)) cursor.execute(cls.__SELECCIONAR) registros = cursor.fetchall() personas = [] for registro in registros: persona = Persona(registro[0], registro[1], registro[2], registro[3]) personas.append(persona) return personas
def obtenerPool(cls): if cls.__pool is None: try: cls.__pool = pool.SimpleConnectionPool(cls.__MIN_CON, cls.__MAX_CON, host=cls.__HOST, user=cls.__USERNAME, password=cls.__PASSWORD, port=cls.__DB_PORT, database=cls.__DATABASE) logger.debug(f'Creación pool existosa: {cls.__pool}') return cls.__pool except Exception as e: logger.error(f'Error al crear el pool de conexiones: {e}') sys.exit() else: return cls.__pool
def __exit__(self, exc_type, exc_val, exc_tb): logger.debug(f'Se ejecuta método __exit__') if exc_val: self.__conn.rollback() logger.debug(f'Ocurrió una excepción: {exc_val}') else: self.__conn.commit() logger.debug('Commit de la transacción') # Cerramos el cursor self.__cursor.close() # Regresar la conexion al pool Conexion.liberarConexion(self.__conn)
@classmethod def eliminar(cls, persona): with CursorDelPool() as cursor: logger.debug(cursor.mogrify(cls.__ELIMINAR)) logger.debug(f'Persona a eliminar: {persona}') values = (persona.get_id_persona()) cursor.execute(cls.__ELIMINAR, values) return cursor.rowcount if __name__ == '__main__': # Listado de personas # personas = PersonaDao.seleccionar() # for persona in personas: # logger.debug(persona) # Insertamos un nuevo registro # persona = Persona(nombre='Pedro', apellido='Najera', email='*****@*****.**') # personas_insertadas = PersonaDao.insertar(persona) # logger.debug(f'Personas insertadas: {personas_insertadas}') # Actualizar un registro existente # persona = Persona(1, 'Juan', 'Pérez2', '*****@*****.**') # persona_actualizada = PersonaDao.actualizar(persona) # logger.debug(f'Personas actualizadas: {persona_actualizada}') # Eliminar un registro existente persona = Persona('9') personas_eliminadas = PersonaDao.eliminar(persona) logger.debug(f'Personas elimiadas: {personas_eliminadas}')
def cerrarConexiones(cls): # Cerrar el pool y todas sus conexiones cls.obtenerPool().closeall() logger.debug(f'Cerramos todas las conexiones del pool: {cls.__pool}')
def liberarConexion(cls, conexion): # Regresar el objeto conexion al pool cls.obtenerPool().putconn(conexion) logger.debug(f'Regresamos la conexion al pool: {conexion}') logger.debug(f'Estado del pool: {cls.__pool}')
def obtenerConexion(cls): # Obtener una conexion del pool conexion = cls.obtenerPool().getconn() logger.debug(f'Conexion obtenida del pool: {conexion}') return conexion
def __enter__(self): logger.debug('Inicio de with método __enter__') self.__conn = Conexion.obtenerConexion() self.__cursor = self.__conn.cursor() return self.__cursor
# Inicio de with def __enter__(self): logger.debug('Inicio de with método __enter__') self.__conn = Conexion.obtenerConexion() self.__cursor = self.__conn.cursor() return self.__cursor # fin del bloque with def __exit__(self, exc_type, exc_val, exc_tb): logger.debug(f'Se ejecuta método __exit__') if exc_val: self.__conn.rollback() logger.debug(f'Ocurrió una excepción: {exc_val}') else: self.__conn.commit() logger.debug('Commit de la transacción') # Cerramos el cursor self.__cursor.close() # Regresar la conexion al pool Conexion.liberarConexion(self.__conn) if __name__ == '__main__': # Obtener un cursor a partir de la conexion del pool # with se ejecuta __enter_ y termina con __exit__ with CursorDelPool() as cursor: cursor.execute('SELECT * FROM persona') logger.debug('Listado de Personas') logger.debug(cursor.fetchall())
return self.__apellido def set_apellido(self, apellido): self.__apellido = apellido def get_email(self): return self.__email def set_apellido(self, apellido): self.__apellido = apellido def __str__(self): return (f'Id Persona: {self.__id_persona}, ' f'Nombre: {self.__nombre}, ' f'Apellido: {self.__apellido}, ' f'Email: {self.__email}') if __name__ == '__main__': persona1 = Persona(1, 'Juan', 'Pérez', 'email') logger.debug(persona1) # simulando un objeto a inserta de tipo persona persona2 = Persona(nombre='Karla', apellido='Gómez', email='*****@*****.**') logger.debug(persona2) # simular el caso de eliminar un objeto persona persona3 = Persona(id_persona=3) logger.debug(persona3)