MS SQL SERVER 2005 + SQLAlchemy + 存储过程 + 输出参数

1 投票
1 回答
959 浏览
提问于 2025-04-18 01:20

在我的Python代码中,我想执行一个存储过程。这个存储过程会返回一个整数值。

CREATE PROCEDURE MY_PROC
  @empID char(10),
  @oldEmpList XML,
  @newEmpList XML,
  @Status INT OUTPUT
AS 
  -- sp body
  SET @Status = 1
RETURN 
GO

python

t = text('EXEC MY_PROC :empID, :oldEmpList, :newEmpList, :Status',
         bindparams=[bindparam('empID', type_=String, value='1234'),
                     bindparam('oldEmpList', type_=TEXT, value='<emp><id>1</id><id>2</id>'),
                     bindparam('newEmpList', type_=TEXT, value='<emp><id>e01</id><id>e02</id>'),
                     bindparam('Status', type_=Integer, value=0, isoutparam=True)])
result = CMS_DBSession.execute(t)
print result.out_parameters

但是它没有打印出任何输出参数。

我该如何访问这个输出参数呢?

1 个回答

0

这里有一个有效的解决方案:https://groups.google.com/forum/#!topic/sqlalchemy/dn-W0rrlwxk

这个解决方案会产生类似这样的结果:

t = text('SET NOCOUNT ON; declare @Status int; EXEC MY_PROC :empID, :oldEmpList, :newEmpList, @Status; Select @Status; SET NOCOUNT OFF;',
     bindparams=[bindparam('empID', type_=String, value='1234'),
                 bindparam('oldEmpList', type_=TEXT, value='<emp><id>1</id><id>2</id>'),
                 bindparam('newEmpList', type_=TEXT, value='<emp><id>e01</id><id>e02</id>'))
result = CMS_DBSession.execute(t)
# then get the select result

撰写回答