Udało mi się rozwiązać problem. Wywołanie conn.commit()
powodował, że kursor tracił wyniki. Prawdopodobnie źle odczytałem część dokumentacji pymssql i przez pomyłkę dodałem tę linię - kod działa bez niej.
EDYTUJ :Zauważyłem, że po wprowadzeniu tej zmiany procedura składowana zwróci wyniki, jednak części procedury wstawiania/aktualizacji nie są zapisywane. Teraz jest dla mnie jasne, co conn.commit()
robił. Jeśli twoja procedura składowana zwraca wyniki ORAZ wprowadza zmiany w bazie danych, musisz wywołać conn.commit()
po ich przyniesieniu.
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()