Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

pymssql executa o procedimento armazenado, mas não retorna resultados


Consegui resolver o problema. Chamando conn.commit() estava fazendo o cursor perder seus resultados. Eu provavelmente interpretei mal parte da documentação do pymssql e adicionei essa linha por engano - o código funciona perfeitamente sem ela.

EDITAR :Percebi que depois de fazer essa alteração, o procedimento armazenado retornaria os resultados, mas as partes de inserção/atualização do procedimento não estavam salvando. Agora está claro para mim o que conn.commit() estava fazendo. Se seu procedimento armazenado retornar resultados E fizer alterações no banco de dados, você precisará chamar conn.commit() depois de buscá-los.
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()