Cambiar las conexiones oracle a pool

This commit is contained in:
2026-04-29 12:15:20 +02:00
parent 0b3dda43f9
commit f682652cd6
2 changed files with 50 additions and 24 deletions
+7 -4
View File
@@ -30,21 +30,24 @@ tema_styles = {
} }
app = Flask(__name__) app = Flask(__name__)
init_pool()
def obtener_turnos(mon_id, qry): def obtener_turnos(mon_id, qry):
conn = get_connection() conn = None
if not conn:
return []
try: try:
conn = get_connection()
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute(qry,{'monitor':mon_id}) cursor.execute(qry,{'monitor':mon_id})
datos = cursor.fetchall() datos = cursor.fetchall()
cursor.close() cursor.close()
conn.close()
return datos return datos
except Exception as e: except Exception as e:
print(f"Error al conectar: {e}") print(f"Error al conectar: {e}")
return None return None
finally:
if conn:
conn.close()
def obtener_pie(mon_id1, mon_id2): def obtener_pie(mon_id1, mon_id2):
conn = get_connection() conn = get_connection()
+31 -8
View File
@@ -1,13 +1,20 @@
import os import os
from dotenv import load_dotenv from dotenv import load_dotenv
#import cx_Oracle
import oracledb import oracledb
load_dotenv() load_dotenv()
# Inicializar el cliente Oracle (Solo una vez al iniciar la app)
oracledb.init_oracle_client(lib_dir=os.getenv("ORA_DIRECTORY")) oracledb.init_oracle_client(lib_dir=os.getenv("ORA_DIRECTORY"))
def get_connection(): # 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: try:
user = os.getenv("DB_USER") user = os.getenv("DB_USER")
password = os.getenv("DB_PASSWORD") password = os.getenv("DB_PASSWORD")
@@ -15,13 +22,29 @@ def get_connection():
port = os.getenv("DB_PORT", "1521") port = os.getenv("DB_PORT", "1521")
sid = os.getenv("DB_SID") sid = os.getenv("DB_SID")
#dsn = cx_Oracle.makedsn(host, port, sid=sid)
dsn = oracledb.makedsn(host, port, sid=sid) dsn = oracledb.makedsn(host, port, sid=sid)
#connection = cx_Oracle.connect(user=user, password=password, dsn=dsn) # Creamos el pool
connection = oracledb.connect(user=user, password=password, dsn=dsn) db_pool = oracledb.create_pool(
user=user,
return connection 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: except oracledb.DatabaseError as e:
print(f"Error al conectar a la base de datos: {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:
return db_pool.acquire()
except oracledb.DatabaseError as e:
print(f"Error al adquirir conexión del pool: {e}")
raise raise