22
loading...
This website collects cookies to deliver better user experience
Es un conjunto limitado de conexiones hacia una base de datos, estas conexiones son reutilizables por los usuarios, este es manejado por un servidor de aplicaciones.
conexion.py
psycopg2
importar pool
from psycopg2 import pool
class Conexion:
__DATABASE = 'test_db'
__USERNAME = 'postgres'
__PASSWORD = 'admin'
__DB_PORT = '5432'
__HOST = '127.0.0.1'
__MIN_CON = 1
__MAX_CON = 5
__pool = None**
#Obteniendo varias coexiones a la base de datos con pool
@classmethod
def obtenerPool(cls):
if cls.__pool == 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'Creacion pool exitosa: {cls.__pool}')
return cls.__pool
except Exception as e:
logger.error(f'Errror al crear el pool de conexiones: {e}')
sys.exit()
else:
return cls.__pool
#Obteniendo la conexion del pool
@classmethod
def obtenerConexion(cls):
conexion = cls.obtenerPool().getconn()
logger.debug(f'Conexión obtenida del pool: {conexion}')
return conexion
#Regresar el objeto conexion al pool
@classmethod
def liberarConexion(cls, conexion):
cls.obtenerPool().putconn(conexion)
#Cerrando todas las conexiones del pool
@classmethod
def cerrarConexiones(cls):
cls.obtenerPool().closeall()
logger.debug(f'Cerramos todas las conexiones del pool: {cls.__pool}')
if __name__ == "__main__":
#Obtener una conexion a partir del pool
conexion1 = Conexion.obtenerConexion()
conexion2 = Conexion.obtenerConexion()
#Regresamos las conexiones al pool
Conexion.liberarConexion(conexion1)
Conexion.liberarConexion(conexion2)
#Cerramos el pool
Conexion.cerrarConexiones()
#error el pool ya esta cerrado
#conexion3 = Conexion.obtenerConexion()