MSSQL2008-Pyodbc-先前的SQL不是查询

发布于 2021-01-29 18:12:29

我无法弄清楚下面的代码出了什么问题,语法正常(已通过SQL Management
Studio检查),我具有应有的访问权限,因此也可以使用..但是由于某种原因,当我尝试创建表时通过PyODBC然后停止工作。

import pyodbc

def SQL(QUERY, target = '...', DB = '...'):
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + target + DB+';UID=user;PWD=pass')
    cursor = cnxn.cursor()
    cursor.execute(QUERY)
    cpn = []

    for row in cursor:
        cpn.append(row)
    return cpn

print SQL("CREATE TABLE dbo.Approvals (ID SMALLINT NOT NULL IDENTITY PRIMARY KEY, HostName char(120));")

它失败并显示:

Traceback (most recent call last):
  File "test_sql.py", line 25, in <module>
    print SQL("CREATE TABLE dbo.Approvals (ID SMALLINT NOT NULL IDENTITY PRIMARY KEY, HostName char(120));")
  File "test_sql.py", line 20, in SQL
    for row in cursor:
pyodbc.ProgrammingError: No results.  Previous SQL was not a query.

有人知道为什么会这样吗?我安装了“ SQL Server”驱动程序(默认),并且在Windows 2008 SQL
Server环境(不是快速数据库)上运行Windows 7。

关注者
0
被浏览
42
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    以防万一某个孤独的游牧民族遇到此问题,Torxed的解决方案对我不起作用。但是以下对我有用。

    我正在调用一个SP,它将一些值插入表中,然后返回一些数据。只需将以下内容添加到SP中:

    SET NOCOUNT ON
    

    会很好的:)

    Python代码:

        query = "exec dbo.get_process_id " + str(provider_id) + ", 0"
        cursor.execute(query)
    
        row = cursor.fetchone()
        process_id = row[0]
    

    SP:

    USE [DBNAME]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER procedure [dbo].[GET_PROCESS_ID](
        @PROVIDER_ID INT,
        @PROCESS_ID INT OUTPUT
    )
    AS
    BEGIN
        SET NOCOUNT ON
        INSERT INTO processes(provider_id) values(@PROVIDER_ID)
        SET @PROCESS_ID= SCOPE_IDENTITY()
        SELECT @PROCESS_ID AS PROCESS_ID
    END
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看