在sqlalchemy中执行存储过程

时间:2015-06-11 08:06:02

标签: python sql-server sqlalchemy

我在sqlalchemy中使用raw_connection来执行一些运行存储过程的SQL。

存储过程最后选择一个参数ID。 我怎么能抓到这个ID?

python代码是:

import sqlalchemy as sa

SQLCommand = """
    DECLARE @Msg varbinary(max) = CAST(%s AS varbinary(max) )
    EXECUTE dbo.usp_procedure @Type = 32, @header = %s, @store = @Msg
    """ % (Datacontent, var)


Engine = sa.create_engine(connection_string)
Connection = Engine.raw_connection()
cursor = Connection.cursor()
cursor.execute(SQLCommand)
return_key = list(cursor.fetchall())
Connection.commit()
Connection.close()

我认为return_key会包含来自usp_procedure的返回码,但是它出错并且我得到了:

No results.  Previous SQL was not a query.

该程序的最后一步是:

SELECT @ParamID

我希望能够在我的python代码中读回这段代码

1 个答案:

答案 0 :(得分:1)

我没有sql-server并仅针对oracle对此进行了测试,但这对评论来说太长了。

创建了这个简单的存储过程

CREATE OR REPLACE PROCEDURE PROCEDURE1(inp IN VARCHAR2, outp OUT VARCHAR2) AS 
BEGIN
  IF (inp = 'true') THEN
    outp := '1';
    RETURN;
  END IF;
  IF (inp = 'false') THEN
    outp := '0';
    RETURN;
  END IF;
  outp := NULL;
  RETURN;
END PROCEDURE1;

并使用以下代码对其进行测试:

Connection = c.manager.engine.raw_connection()
cursor = Connection.cursor()
result = cursor.callproc("PROCEDURE1", ['true', ''])
print(result[1])
result = cursor.callproc("PROCEDURE1", ['false', ''])
print(result[1])

结果是预期的1和0.

我一直在浏览,我希望callproc可用于sql-server,例如here但不老实说,我不是sqlalchemy将要使用的内容。试一试,希望有所帮助。

相关问题