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()