sql >> Base de Datos >  >> RDS >> Sqlserver

pymssql ejecuta el procedimiento almacenado pero no devuelve resultados

He logrado resolver el problema. Llamando a conn.commit() estaba haciendo que el cursor perdiera sus resultados. Probablemente leí mal parte de la documentación de pymssql y agregué esa línea por error; el código funciona perfectamente sin ella.

EDITAR Nota:después de realizar este cambio, noté que el procedimiento almacenado devolvería los resultados, sin embargo, las partes de inserción/actualización del procedimiento no se guardaban. Ahora me queda claro qué conn.commit() estaba haciendo. Si su procedimiento almacenado devuelve resultados Y realiza cambios en la base de datos, debe llamar a conn.commit() después de buscarlos.

server = 'MY\SERVER'
user = 'user'
password = 'password'
database = 'db'
proc = 'checkin'

with pymssql.connect(server, user, password, database) as conn:
    with conn.cursor() as cursor:
        cursor.callproc(proc, (eha, ip, url, alias, location, rotation))
        cursor.nextset()
        results = cursor.fetchall()
        conn.commit()
        f = open('/var/wwwdata/locations.txt', 'w')
        for result in results:
            print result[0]
            f.write(result[0])
        f.close()