first commit
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
# Utilidades para conexión a BD - Reutilizado y ajustado de database.py v1
|
||||
import pyodbc
|
||||
from App.Config.GeneralConfig import ConfigDatabase # Ajusta si GeneralConfig tiene otra estructura
|
||||
|
||||
class DatabaseManager:
|
||||
def __init__(self, database, databaseID):
|
||||
self.db_database = database
|
||||
self.db_user = ConfigDatabase.db_user
|
||||
self.db_password = ConfigDatabase.db_password
|
||||
self.db_host = ConfigDatabase.db_host
|
||||
self.db_databaseID = databaseID
|
||||
|
||||
def _connect(self):
|
||||
try:
|
||||
self.conn_str = (
|
||||
'DRIVER={ODBC Driver 18 for SQL Server};'
|
||||
f'SERVER={self.db_host};'
|
||||
f'DATABASE={self.db_database};'
|
||||
f'UID={self.db_user};'
|
||||
f'PWD={self.db_password};'
|
||||
f'Encrypt=yes;'
|
||||
f'TrustServerCertificate=yes;'
|
||||
)
|
||||
#print(self.conn_str)
|
||||
self.connection = pyodbc.connect(self.conn_str)
|
||||
except pyodbc.Error as e:
|
||||
print(f"Error al conectar a la base de datos: {e}")
|
||||
self.connection = None
|
||||
|
||||
def _disconnect(self):
|
||||
if self.connection:
|
||||
self.connection.close()
|
||||
|
||||
# Función para ejecutar queries que retornan valores
|
||||
def get_execute_query(self, query):
|
||||
self._connect()
|
||||
if not self.connection:
|
||||
return None, "Error de conexión"
|
||||
|
||||
|
||||
self.cursor = self.connection.cursor()
|
||||
self.cursor.execute(query)
|
||||
columns = [col[0] for col in self.cursor.description]
|
||||
data = self.cursor.fetchall()
|
||||
results = [dict(zip(columns, row)) for row in data]
|
||||
self.cursor.close()
|
||||
self._disconnect()
|
||||
return results
|
||||
|
||||
|
||||
# Función para ejecutar queries que retornan valores
|
||||
def get_execute_query2(self, query):
|
||||
self._connect()
|
||||
if not self.connection:
|
||||
return None, "Error de conexión"
|
||||
|
||||
try:
|
||||
self.cursor = self.connection.cursor()
|
||||
self.cursor.execute(query)
|
||||
columns = [col[0] for col in self.cursor.description]
|
||||
data = self.cursor.fetchall()
|
||||
results = [dict(zip(columns, row)) for row in data]
|
||||
self.cursor.close()
|
||||
return results, None
|
||||
except Exception as e:
|
||||
print(f"Error al ejecutar la consulta SELECT: {e} \n {query}")
|
||||
return None, str(e)
|
||||
finally:
|
||||
self._disconnect()
|
||||
|
||||
# Función para ejecutar queries que no retornan valores
|
||||
def set_execute_query(self, query):
|
||||
self._connect()
|
||||
if not self.connection:
|
||||
return False
|
||||
|
||||
try:
|
||||
cursor = self.connection.cursor()
|
||||
cursor.execute(query)
|
||||
self.connection.commit()
|
||||
cursor.close()
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Error al ejecutar la consulta de modificación: {e}")
|
||||
return False
|
||||
finally:
|
||||
self._disconnect()
|
||||
|
||||
def log_execution(self, procedure_id, procedure_name, status, message, executed_by, extra_info, target_date, date,
|
||||
procedure_type='PYTHON_APP', source='PYTHON_TRANSFERDATA_APP'):
|
||||
self._connect()
|
||||
if not self.connection:
|
||||
return
|
||||
self.cursor = self.connection.cursor()
|
||||
|
||||
sql = """
|
||||
DECLARE @ExecID VARCHAR(50), @FieldID VARCHAR(50);
|
||||
EXEC dbo.InsertExecutionLog
|
||||
@ProcedureID = ?,
|
||||
@ProcedureName = ?,
|
||||
@ProcedureType = ?,
|
||||
@Date = ?,
|
||||
@TargetDate = ?,
|
||||
@Status = ?,
|
||||
@ExecutedBy = ?,
|
||||
@MessageDescription = ?,
|
||||
@Source = ?,
|
||||
@ExtraInfo = ?,
|
||||
@ExecutionIDGenerated = @ExecID OUTPUT,
|
||||
@FieldIDGenerated = @FieldID OUTPUT;
|
||||
SELECT @ExecID AS ExecutionID, @FieldID AS FieldID;
|
||||
"""
|
||||
|
||||
try:
|
||||
self.cursor.execute(sql, (
|
||||
procedure_id, procedure_name, procedure_type,
|
||||
date, target_date, status,
|
||||
executed_by, message, source, extra_info
|
||||
))
|
||||
row = self.cursor.fetchone()
|
||||
self.connection.commit()
|
||||
except Exception as e:
|
||||
print(f"Error en log_execution: {e}")
|
||||
finally:
|
||||
self._disconnect()
|
||||
|
||||
|
||||
|
||||
|
||||
# Función simple para compatibilidad (usa DatabaseManager internamente)
|
||||
def get_db_connection(database='tu_db', databaseID='default'):
|
||||
manager = DatabaseManager(database, databaseID)
|
||||
manager._connect()
|
||||
return manager.connection # Devuelve la conexión cruda para pandas, etc.
|
||||
Reference in New Issue
Block a user