python - 使用 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)
虽然似乎应该有一个更好/更清洁的解决方案。
解决方案
推荐阅读
- gradle - 使用 gradle 命令构建成功但未执行标记的 junit 测试用例
- flutter - 未使用函数参数的 Lint 规则
- python - 使用 PYTHON 通过 ssh 发送 cqlsh 命令的正确方法
- excel - 将所有切片器连接到所有数据透视表
- javascript - FlexBox 容器没有容纳我的 div,有人可以回答我为什么吗
- javascript - 将 Mongodb 集合中的实例保存为 Atlas 触发器函数中的字符串变量
- next.js - 为什么在下一个 js 中使用 getStaticProps 获取 API 数据时显示加载屏幕?
- ios - Flutter run crash on IOS Error running pod install
- nginx - Nginx 无法从 cookie 验证 JWT
- python - Python 默认字典行为