gpt4 book ai didi

python - pymssql 执行存储过程但没有返回结果

转载 作者:太空狗 更新时间:2023-10-29 22:29:45 26 4
gpt4 key购买 nike

我正在尝试在 SQL 服务器上执行存储过程并使用 python 保存结果——我决定使用 pymssql,因为它似乎是最简单的解决方案。

print pymssql.__version__

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))
conn.commit()

f = open('/var/wwwdata/locations.txt', 'w')
for row in cursor:
print(row['Alias'])
f.write(row['Alias'] + '\n')
f.close()

SQL 查询执行一些插入/更新并以

结束
SELECT Alias FROM MyTable

从 SSMS 运行 SP 可以正常工作,但是从 Python 运行 SP 会执行插入/更新功能,但不会返回任何结果。

根据 pymssql documentation ,这是一个已知问题。但是,我找不到有效的解决方案。

我尝试了一些在网络上找到的不同建议,包括

  • 检查了我的 pymssql 版本 (2.1.1)
  • dict=true声明游标
  • cursor.commit() 之后使用 cursor.nextset()
  • 使用 cursor.fetchall()cursor.fetchone() 获取结果,这两种方法都会导致类似的异常:

OperationalError: Statement not executed or executed statement has no resultset

有谁知道这个特定问题的解决方法吗?或者对于 python 与 SQL Server 接口(interface)(尤其是调用存储过程)是否有更稳定的解决方案?我想我还应该问,我这样做是不是完全错了?

还认为可能值得注意:操作系统是在 Raspberry Pi 2 Model B 上运行的 Raspbian

最佳答案

我已经设法解决了这个问题。调用 conn.commit() 会使游标丢失其结果。我可能误读了一些 pymssql 文档并错误地添加了该行 - 没有它代码工作完美。

编辑:我注意到在进行此更改后,存储过程将返回结果,但是过程的插入/更新部分没有保存。现在我很清楚 conn.commit() 做了什么。如果您的存储过程返回结果并对数据库进行更改,您需要在获取结果后调用 conn.commit()

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

关于python - pymssql 执行存储过程但没有返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com