【发布时间】:2016-02-01 20:16:32
【问题描述】:
我正在尝试在 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: 语句未执行或执行的语句没有结果集
有人知道解决这个特殊问题的方法吗?或者也许有一个更稳定的 Python 与 SQL 服务器接口的解决方案(尤其是调用存储过程)?我想我也应该问,我这样做完全错了吗?
还认为可能值得注意:操作系统是在 Raspberry Pi 2 Model B 上运行的 Raspbian
【问题讨论】:
标签: python sql-server sql-server-2012 pymssql