Python 3 和 pypyodbc 存储过程错误

ete*_*ent 3 sql-server stored-procedures python-3.x pypyodbc

我目前正在运行 Python 3.4.2 和 pypyodbc 1.3.6。

我正在尝试在 SQL 服务器上运行存储过程。当我在没有所需参数(日期)的情况下运行存储过程时,我收到一个错误,指出需要一个参数(这是预期的)。

当我添加这个日期时,我收到一条错误消息:

无效的游标状态。

我已验证日期格式正确,(YYYY-MM-DD)并且尝试了多种方法,但每次都遇到相同的错误。

下面是我正在使用的代码:

import pypyodbc as odbc

connection_string = "DRIVER={SQL SERVER};SERVER=SERVERNAME;DATABASE=DATABASE;Trusted_Connection=yes"
conn = odbc.connect(connection_string)
cur = conn.cursor()
cur.execute("exec stored_procedure '2017-05-01'")
report_temp = cur.fetchall()
Run Code Online (Sandbox Code Playgroud)

收到错误:

line 975, in ctrl_err raise ProgrammingError(state,err_text)
pypyodbc.ProgrammingError: ('24000', '[24000] [Microsoft][ODBC SQL Server Driver]Invalid cursor state')
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

Dav*_*oft 5

确保存储过程在结果集之前没有输出任何行数或其他消息。这可能会混淆 python 驱动程序。EG 此过程失败并显示该代码的错误

create or alter procedure stored_procedure @date datetime
as
begin
  --set nocount on
  select * into #t from sys.objects
  select * from #t
end
Run Code Online (Sandbox Code Playgroud)

但是取消注释“set nocount on”可以让它成功

create or alter procedure stored_procedure @date datetime
as
begin
  set nocount on
  select * into #t from sys.objects
  select * from #t
end
Run Code Online (Sandbox Code Playgroud)