Python pymssql执行存储过程,但不返回任何结果
我试图在SQL server上执行一个存储过程,并使用python保存结果——我决定使用pymssql,因为它似乎是最简单的解决方案Python pymssql执行存储过程,但不返回任何结果,python,sql-server,sql-server-2012,pymssql,Python,Sql Server,Sql Server 2012,Pymssql,我试图在SQL server上执行一个存储过程,并使用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:
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版本(2.1.1)
- 用dict=true声明游标
- 在
cursor.commit()之后使用
cursor.nextset()
- 使用
或cursor.fetchall()
获取结果,这两种方法都会导致类似的异常:cursor.fetchone()
还认为这可能值得注意:操作系统是Raspbian在Raspberry Pi 2模型B上运行的吗?我已经设法解决了这个问题。调用
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()
谢谢我自己永远也不会发现这一点。谢谢你发布这篇文章——它也解决了我的一个问题。通过添加conn.commit,我能够使存储过程正常工作。我只是花了三个小时来琢磨这件事。对于python与MS SQL的交互性没有更多的问题,我感到相当惊讶。