lea*_*gcs 6 python sql-server pymssql sql-server-2012
我试图在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()
Run Code Online (Sandbox Code Playgroud)
SQL Query执行一些插入/更新并以结尾
SELECT Alias FROM MyTable
Run Code Online (Sandbox Code Playgroud)
从SSMS运行SP可以正常工作,但是从Python运行SP会执行插入/更新功能,但不会返回任何结果.
根据pymssql文档,这是一个已知问题.但是,我找不到有效的解决方案.
我在网上找到了一些不同的建议,包括
dict=truecursor.nextset()之后使用cursor.commit()cursor.fetchall()或获取结果cursor.fetchone(),两者都会导致类似的异常:OperationalError:语句未执行或已执行语句没有结果集
有谁知道解决这个特殊问题?或者是否有一个更稳定的解决方案,用于python与SQL服务器的接口(特别是对于调用存储过程)?我想我也应该问,我是否完全错了?
还认为值得注意的是:操作系统是在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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5513 次 |
| 最近记录: |