Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

pymssql exécute la procédure stockée mais ne renvoie aucun résultat

J'ai réussi à résoudre le problème. Appel de conn.commit() faisait perdre au curseur ses résultats. J'ai probablement mal lu une partie de la documentation pymssql et ajouté cette ligne par erreur - le code fonctionne parfaitement sans elle.

MODIFIER :J'ai remarqué qu'après avoir apporté cette modification, la procédure stockée renverrait les résultats, mais les parties d'insertion/mise à jour de la procédure n'étaient pas enregistrées. Maintenant, il est clair pour moi ce que conn.commit() était en train de faire. Si votre procédure stockée renvoie des résultats ET apporte des modifications à la base de données, vous devez appeler conn.commit() après les avoir récupérés.

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