繁体   English   中英

带有输出的 sqlalchemy 存储过程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM