gpt4 book ai didi

python - 使用pyodbc的sql server返回值

转载 作者:行者123 更新时间:2023-11-28 21:15:31 25 4
gpt4 key购买 nike

我正在尝试使用 pyodbc 运行一些存储过程并使用以下代码获取单个返回值:

conn = pyodbc.connect("driver={SQL Server};server=MyServer;database=MyDB;trusted_connection=true") 

cursor = conn.cursor()

SQL_command = """
DECLARE @ret INT

EXEC @ret = [dbo].proc_mySP
@group= 0
, @description =?

SELECT @ret
"""

cursor.execute(SQL_command, description)
retValue = cursor.fetchall()

存储过程的框架如下:

-- SOME CODE
-- ......
-- EXEC another_sp
-- DECLARE @RET INT
-- SELECT @RET as retValue
-- ......

上面的sql在sql server中运行的很好,但是当用上面的python代码调用的时候,报错信息:

pyodbc.ProgrammingError: ('24000', '[24000] [Microsoft][ODBC SQL Server Driver]Invalid cursor state (0) (SQLNumResultCols)')

我可以知道我的代码有什么问题吗?

非常感谢。

最佳答案

尝试通过 pyodbc 运行多语句 T-SQL 脚本可能会出现问题。尽管这在 SSMS 中运行良好

DECLARE @tbl AS TABLE (retVal INT);
INSERT INTO @tbl (retVal)
EXEC [dbo].proc_mySP
@group = 37,
@description = 'foo';
SELECT retVal FROM @tbl;

以下 Python 代码 ...

sql = """\
DECLARE @tbl AS TABLE (retVal INT);
INSERT INTO @tbl (retVal)
EXEC [dbo].proc_mySP
@group = 37,
@description = ?;
SELECT retVal FROM @tbl;
"""
crsr.execute(sql, ['foo'])
row = crsr.fetchone()

...失败

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

如果存储过程返回单列单行结果集,那么您需要做的就是

import pyodbc
cnxn = pyodbc.connect("DSN=myDb_SQLEXPRESS")
crsr = cnxn.cursor()
sql = """\
EXEC [dbo].proc_mySP
@group = 37,
@description = ?;
"""
crsr.execute(sql, ['foo'])
the_result = crsr.fetchone()[0]
print(the_result)

关于python - 使用pyodbc的sql server返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30058957/

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