-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconexion.py
More file actions
72 lines (62 loc) · 2.62 KB
/
conexion.py
File metadata and controls
72 lines (62 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from logger_base import logger
from psycopg2 import pool
import sys
#import logging
# logger.basicConfig(level=logging.DEBUG)
class Conexion:
__DATABASE = 'test_db'
__USERNAME = 'postgres'
__PASSWORD = 'admin'
__DB_PORT = '5432'
__HOST = '127.0.0.1'
__MIN_CON = 1 # Mínimo de conexiones
__MAX_CON = 5
__pool = None # Estática a la clase
@classmethod
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 exitosa: {cls.__pool}')
return cls.__pool
except Exception as ex:
logger.error(f'Error al crear el pool de conexiones: {ex}')
sys.exit()
else:
return cls.__pool
@classmethod
def obtenerConexion(cls): # Administra el pool de conexiones
# Obtener una conexión del objeto pool
conexion = cls.obtenerPool().getconn()
logger.debug(f'Conexión obtenida del pool: {conexion}')
return conexion
@classmethod
def liberarConexion(cls, conexion):
# Regresar el objeto conexión al pool
# cls puede solicitar métodos internos
cls.obtenerPool().putconn(conexion) # putconn
logger.debug(f'Regresamos la conexión al pool : {conexion}')
logger.debug(f'Estado del pool: {cls.__pool}')
@classmethod
def cerrarConexiones(cls):
# Cerrar el pool y todas sus conexiones
# AL usarlo se deben asignar desde cero
cls.obtenerPool().closeall()
logger.debug(f'Cerramos todas las conexiones del pool: {cls.__pool}')
if __name__ == '__main__':
# Obtener una conexión a partir del pool
conexion1 = Conexion.obtenerConexion()
conexion2 = Conexion.obtenerConexion()
#Regresamos las conexiones al pool
Conexion.liberarConexion(conexion1)
Conexion.liberarConexion(conexion2)
#Cerrar el pool
Conexion.cerrarConexiones()
#Si intentamos perdir una conexión de un pool enviará el error "conection pool is close"
#conexion3 = Conexion.obtenerConexion()