Cambiar las conexiones oracle a pool
This commit is contained in:
+43
-20
@@ -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
|
||||
Reference in New Issue
Block a user