Cambiar las conexiones oracle a pool
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
+43
-20
@@ -1,27 +1,50 @@
|
|||||||
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()
|
||||||
|
|
||||||
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():
|
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:
|
try:
|
||||||
user = os.getenv("DB_USER")
|
return db_pool.acquire()
|
||||||
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
|
|
||||||
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 adquirir conexión del pool: {e}")
|
||||||
raise
|
raise
|
||||||
Reference in New Issue
Block a user