es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Procedimiento almacenado en PyODBC escribe: no todos los argumentos se convierten durante el formateo de cadenas.

Tengo este código:

with connections["mssql_database"].cursor() as cursor:
    sql = "EXEC SaveActivity @id_workplace=?, @personal_number=?, @id_activity=?"
    params = (id_workplace, personal_number, id_activity)
    cursor.execute(sql, params)


TypeError: no todos los argumentos se convierten durante el formateo de cadenas

Cuando intento

cursor.callproc("SaveActivity", [id_workplace, personal_number, id_activity])

aparece:

AttributeError: el objeto 'pyodbc.Cursor' no tiene el atributo 'callproc'
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando ejecutar un procedimiento almacenado llamado “SaveActivity” utilizando el motor de conexión a la base de datos de Django. El primer bloque de código que proporcionaste intenta ejecutar el procedimiento almacenado pasando los parámetros a través de una consulta SQL formateada como cadena. Sin embargo, parece que los parámetros no se están convirtiendo correctamente en la consulta SQL, lo que resulta en un TypeError.

    El segundo bloque de código que intentaste utiliza el método “callproc” del objeto cursor proporcionado por la biblioteca pyodbc. Sin embargo, parece que el objeto cursor devuelto por el motor de conexión a la base de datos de Django no tiene este atributo, lo que resulta en un AttributeError.

    Para ejecutar un procedimiento almacenado utilizando el motor de conexión a la base de datos de Django y la biblioteca pyodbc, puedes intentar lo siguiente:

    with connections["mssql_database"].cursor() as cursor:
        cursor.execute("{CALL SaveActivity (?, ?, ?)}", [id_workplace, personal_number, id_activity])
    

    En este código, la consulta SQL se pasa como una cadena con la sintaxis de llamada al procedimiento almacenado dentro de llaves. Los parámetros se pasan como una lista en el segundo argumento del método “execute”, siendo que cada parámetro corresponde a los signos de interrogación en la consulta SQL.

    ¡Espero que esto te ayude!

Comments are closed.