gpt4 book ai didi

python - MSSQL2008 - Pyodbc - 以前的 SQL 不是查询

转载 作者:IT老高 更新时间:2023-10-28 20:24:17 26 4
gpt4 key购买 nike

我无法弄清楚以下代码有什么问题,语法没问题(用 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

关于python - MSSQL2008 - Pyodbc - 以前的 SQL 不是查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7753830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com