diff --git a/app.py b/app.py index 8737682..1d3a5fd 100644 --- a/app.py +++ b/app.py @@ -30,21 +30,24 @@ tema_styles = { } app = Flask(__name__) +init_pool() def obtener_turnos(mon_id, qry): - conn = get_connection() - if not conn: - return [] + conn = None try: + conn = get_connection() cursor = conn.cursor() cursor.execute(qry,{'monitor':mon_id}) datos = cursor.fetchall() cursor.close() - conn.close() return datos except Exception as e: print(f"Error al conectar: {e}") return None + finally: + if conn: + conn.close() + def obtener_pie(mon_id1, mon_id2): conn = get_connection() diff --git a/conexion.py b/conexion.py index 13e241d..29e6e1b 100644 --- a/conexion.py +++ b/conexion.py @@ -1,27 +1,50 @@ -import os -from dotenv import load_dotenv -#import cx_Oracle -import oracledb +import os +from dotenv import load_dotenv +import oracledb -load_dotenv() +load_dotenv() -oracledb.init_oracle_client(lib_dir=os.getenv("ORA_DIRECTORY")) +# Inicializar el cliente Oracle (Solo una vez al iniciar la app) +oracledb.init_oracle_client(lib_dir=os.getenv("ORA_DIRECTORY")) + +# Variable global para almacenar el pool +db_pool = None + +def init_pool(): + """ + Esta función debe llamarse una sola vez al arrancar el servidor (ej. en el main) + """ + global db_pool + try: + user = os.getenv("DB_USER") + password = os.getenv("DB_PASSWORD") + host = os.getenv("DB_HOST") + port = os.getenv("DB_PORT", "1521") + sid = os.getenv("DB_SID") + + dsn = oracledb.makedsn(host, port, sid=sid) + + # Creamos el pool + db_pool = oracledb.create_pool( + user=user, + password=password, + dsn=dsn, + min=2, # Conexiones mínimas siempre abiertas + max=10, # Máximo de conexiones simultáneas permitidas + increment=1 + ) + print("Pool de conexiones creado exitosamente") + except oracledb.DatabaseError as e: + print(f"Error al crear el pool: {e}") + raise def get_connection(): + """ + Obtiene una conexión del pool. + IMPORTANTE: El que llama a esta función DEBE devolver la conexión al pool. + """ try: - user = os.getenv("DB_USER") - password = os.getenv("DB_PASSWORD") - host = os.getenv("DB_HOST") - port = os.getenv("DB_PORT", "1521") - sid = os.getenv("DB_SID") - - #dsn = cx_Oracle.makedsn(host, port, sid=sid) - dsn = oracledb.makedsn(host, port, sid=sid) - - #connection = cx_Oracle.connect(user=user, password=password, dsn=dsn) - connection = oracledb.connect(user=user, password=password, dsn=dsn) - - return connection + return db_pool.acquire() except oracledb.DatabaseError as e: - print(f"Error al conectar a la base de datos: {e}") + print(f"Error al adquirir conexión del pool: {e}") raise \ No newline at end of file