【问题标题】:pyodbc.ProgrammingError: No results. Previous SQL was not a query, when executing multiple statements at oncepyodbc.ProgrammingError:没有结果。一次执行多个语句时,以前的 SQL 不是查询
【发布时间】:2018-06-12 04:17:38
【问题描述】:

我正在处理 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 包有错误吗?或在我的查询中

【问题讨论】:

  • 尝试将SET NOCOUNT ON; 添加到 SQL 字符串的开头。
  • @GordThompson 谢谢你解决了

标签: python pyodbc


【解决方案1】:

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

猜你喜欢
  • 2015-03-20
  • 2022-01-18
  • 2012-04-14
  • 2018-10-17
  • 2013-04-09
  • 2013-01-23
  • 2020-07-27
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多