pyodbc.ProgrammingError:没有结果。在一次执行多个语句时,以前的SQL不是查询

时间:2018-01-02 12:47:21

标签: python pyodbc

我正在处理sql server数据库,

我有一个名为' table1 '的表,其中包含1列和1行

exp_num
0 

我正在尝试将0值exp_num列更新为+1,并返回旧实验并更新实验。

为此,我使用声明语句。

DECLARE @UpdateOutput1 table (Oldexp_num int,Newexp_num int);

UPDATE get_exp_num
    SET exp_num = exp_num+1

OUTPUT
    DELETED.exp_num,
    INSERTED.exp_num
  INTO @UpdateOutput1;

 select * from @UpdateOutput1

当我在SQL editor中运行时,我会得到结果。

Oldexp_num   Newexp_num
    0             1

但如果我将其作为查询使用,并尝试使用pyodbc包我会收到错误。

import pyodbc

connection = pyodbc.connect()  # i am getting a connection
query = "DECLARE @UpdateOutput1 table (Oldexp_num int,Newexp_num int);UPDATE get_exp_num SET exp_num = exp_num+1 OUTPUT DELETED.exp_num, INSERTED.exp_num INTO @UpdateOutput1; select Newexp_num from @UpdateOutput1;"
cursor = connection.cursor()
cursor.execute(query)
cursor.fetchone()

当我在做cursor.fetchone()时,我收到了以下错误。

File "<ipython-input-1398-bdaba305080c>", line 1, in <module>
    cursor.fetchone()

ProgrammingError: No results.  Previous SQL was not a query.

pyodbc包中有错误吗?或者在我的查询中

1 个答案:

答案 0 :(得分:6)

通过将SET NOCOUNT ON;添加到匿名代码块的开头来解决问题。该语句抑制由UPDATE ...等DML语句生成的记录计数值,并允许直接检索结果集。