Files

50 lines
1.4 KiB
Python

import os
from dotenv import load_dotenv
import oracledb
load_dotenv()
# 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:
return db_pool.acquire()
except oracledb.DatabaseError as e:
print(f"Error al adquirir conexión del pool: {e}")
raise