MSSQL2008-Pyodbc-先前的SQL不是查询
我无法弄清楚下面的代码出了什么问题,语法正常(已通过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。
-
以防万一某个孤独的游牧民族遇到此问题,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