我在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代码中读回这段代码
答案 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
将要使用的内容。试一试,希望有所帮助。