首页 > 解决方案 > 使用 Python pyodbc 模块,如何从 SQL Server 存储过程中获取输出参数的值?

问题描述

这是存储过程:

CREATE PROCEDURE [dbo].[procIncrementInt]
    (@IN_INT int,
     @OUT_INT int OUTPUT) 
AS
BEGIN
    SET NOCOUNT ON
    SET @OUT_INT = @IN_INT + 1
END

这是不起作用的 Python 代码:

import pyodbc
odbcConn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=HHPC\SQLEXPRESS;DATABASE=hhDb;Trusted_Connection=yes')
odbcCursor = odbcConn.cursor()
execProcSql = """EXEC procIncrementInt @IN_INT=?, @OUT_INT=?"""
inInt = 7
outInt = -1
print(inInt, outInt)
odbcCursor.execute(execProcSql, (inInt, outInt))
print(inInt, outInt)

代码运行没有错误,但值outInt保持在 -1,而不是更新为 8。

此 Python 代码可以正常工作,而无需更改 SQL Server 存储过程:

import pyodbc
odbcConn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=HHPC\SQLEXPRESS;DATABASE=hhDb;Trusted_Connection=yes')
odbcCursor = odbcConn.cursor()
inInt = 7
outInt = -1
execProcSql = """\
DECLARE @PY_OUT int
EXEC procIncrementInt @IN_INT = ?, @OUT_INT = @PY_OUT OUTPUT
SELECT @PY_OUT
"""
print(inInt, outInt)
odbcCursor.execute(execProcSql, (inInt))
row = odbcCursor.fetchone()
outInt = row[0]
print(inInt, outInt)

虽然似乎应该有一个更好/更清洁的解决方案。

标签: pythonsql-serverstored-procedurespyodbcoutput-parameter

解决方案


推荐阅读