[英]sqlalchemy Stored Procedure with Output
我想在python中调用一个存储过程并接收输出参数。 我正在使用 sqlAlchemy 并且可以使用参数,但不知道如何将输出读入变量。 我知道 sqlAlchemy 中有一个 outParam() 属性,但我还没有找到有用的例子。
这是用于测试的简单 SQL 代码:
CREATE PROCEDURE [dbo].[Test]
@numOne int,
@numTwo int,
@numOut int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET @numOut = @numOne + @numTwo
END
和简单的python:
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
outParam = 0
result = engine.execute('Test ? ,?, ? OUTPUT', [1, 2, outParam])
outParam 仍然是 0。我尝试修改它:
outParam = sqlalchemy.sql.outparam("ret_%d", type_=int)
但这会产生“编程错误”。 我错过了什么?
SQLAlchemy 返回一个ResultProxy
对象。 像这样尝试:
engine = sqlalchemy.create_engine(...)
rproxy = engine.execute(...)
result = rproxy.fetchall()
result
应该是一个RowProxy
对象list
,您可以将其视为字典,以查询中的列名称为键。
如果您正在寻找真正的OUT
参数,那么您的方法几乎是正确的。 在调用sqlalchemy.sql.outparam
的第一个参数中只有一个小错误(但它是有效的 Python 语法)。 应该是这样的:
outParam = sqlalchemy.sql.outparam("ret_%d" % i, type_=int)
请注意对第一个参数的更改:它只需要一个值来替换格式字符串。 第一个参数是key
,很可能%d
将被替换为列索引号(应该在i
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.