Sesión #3
Duración 2 horas 10:00am-12:00pm
Se creó la conexión del servidor en Flask con la Base de Datos
def get_db_connection():
connection = pyodbc.connect(
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=ERICKPC;'
'DATABASE=tarea1;'
'UID=hola;'
'PWD=123'
)
return connection
Se creó el SP para insertar empleados, tomando como ejemplo, el que el profesor realizó en clase, agregandole una transacción para que la operación sea todo o nada, junto con la validación de que el nombre no exista en la BD
CREATE PROCEDURE [dbo].[InsertarEmpleado]
@Nombre VARCHAR(128)
, @Salario MONEY
, @OutResulTCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SET @OutResulTCode=0;
SELECT @OutResulTCode AS OutResulTCode; -- Este codigo se agrega solo si hay problemas para obtener este valor como parametros
IF EXISTS (SELECT 1 FROM dbo.Empleado WHERE Nombre = @Nombre)
BEGIN
SET @OutResulTCode=50001;
END
ELSE
BEGIN
BEGIN TRANSACTION;
BEGIN
INSERT INTO dbo.Empleado (Nombre, Salario) VALUES (@Nombre, @Salario);
COMMIT TRANSACTION;
END
BEGIN
SET @OutResulTCode=0;
END
END
END TRY
BEGIN CATCH
INSERT INTO dbo.DBErrors VALUES (
SUSER_SNAME(),
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE()
);
SET @OutResulTCode=50005 ; -- Codigo de error standar del profe para informar de un error capturado en el catch
END CATCH;
SET NOCOUNT Off;
END;
Se tuvo un problema con este SP ya que no podíamos tomar el OutResultCode, esto se debía a la linea:
SELECT @OutResulTCode AS OutResulTCode;
La misma se eliminó y el SP se pudo ejecutar de manera correcta
Se creó la función del servidor de flask para ejecutar el SP mencionado:
@app.route('/insertar_empleado', methods=['POST'])
def insertar_empleado():
nombre = request.json.get('nombre')
salario = request.json.get('salario')
conn = get_db_connection()
cursor = conn.cursor()
try:
# Declarar y ejecutar el procedimiento almacenado con OUTPUT
cursor.execute("""
DECLARE @return_value int,
@OutResulTCode int
EXEC @return_value = [dbo].[InsertarEmpleado]
@Nombre = ?,
@Salario = ?,
@OutResulTCode = @OutResulTCode OUTPUT
SELECT @OutResulTCode as N'@OutResultCode'
""", (nombre, salario))
# Obtener el valor del código de resultado
out_result_code = cursor.fetchone()[0]
# Confirmar la transacción si todo es exitoso
conn.commit()
except Exception as e:
return jsonify({'error': str(e)}), 500
finally:
# Cerrar el cursor y la conexión
cursor.close()
conn.close()
# Devolver el código de resultado como respuesta
return jsonify({'OutResulTCode': out_result_code})
Comentarios
Publicar un comentario