Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

pymssql führt gespeicherte Prozeduren aus, gibt aber keine Ergebnisse zurück

Ich habe es geschafft, das Problem zu lösen. Aufruf von conn.commit() ließ den Cursor seine Ergebnisse verlieren. Ich habe wahrscheinlich einen Teil der pymssql-Dokumentation falsch gelesen und diese Zeile versehentlich hinzugefügt - der Code funktioniert perfekt ohne sie.

BEARBEITEN :Nachdem ich diese Änderung vorgenommen hatte, bemerkte ich, dass die gespeicherte Prozedur die Ergebnisse zurückgab, aber die Einfüge-/Aktualisierungsteile der Prozedur wurden nicht gespeichert. Jetzt ist mir klar, was conn.commit() ist Hat gemacht. Wenn Ihre gespeicherte Prozedur Ergebnisse zurückgibt UND Änderungen an der Datenbank vornimmt, müssen Sie conn.commit() aufrufen nachdem Sie sie abgeholt haben.

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