如何在Python中获取存储过程的输出参数?

13 投票
10 回答
37710 浏览
提问于 2025-04-11 09:28

我在网上查了一下,但可能没有用对关键词。

有没有人知道怎么在Python中获取存储过程的输出参数?我正在用pymssql来调用一个存储过程,但不太确定怎么写语法才能拿到输出参数。我觉得我不能用其他数据库模块,因为我是在Linux系统上运行的,要连接到微软服务器上的mssql数据库。

import pymssql

con = pymssql.connect(host='xxxxx',user='xxxx',password='xxxxx',database='xxxxx')

cur = con.cursor()

query = "EXECUTE blah blah blah"

cur.execute(query)
con.commit()
con.close()

10 个回答

1

如果你让你的程序产生一个表格,那么你可以把这个结果当作输出参数的替代品。

所以,不用这样:

CREATE PROCEDURE Foo (@Bar INT OUT, @Baz INT OUT) AS
BEGIN
   /* Stuff happens here */
   RETURN 0
END

CREATE PROCEDURE Foo (@Bar INT, @Baz INT) AS
BEGIN
   /* Stuff happens here */
   SELECT @Bar Bar, @Baz Baz
   RETURN 0
END
3

如果你不能或者不想修改原来的程序,但又能访问数据库,你可以写一个简单的包装程序,这样就可以从Python中调用它。

比如说,如果你有一个存储过程,像这样:

CREATE PROC GetNextNumber
   @NextNumber int OUTPUT
AS
...

你可以写一个包装程序,像这样,这样就可以很方便地从Python中调用:

CREATE PROC GetNextNumberWrap
AS
    DECLARE @RNextNumber int
    EXEC GetNextNumber @RNextNumber
    SELECT @RNextNumber
GO

然后你可以这样从Python中调用它:

import pymssql
con = pymssql.connect(...)
cur = con.cursor()
cur.execute("EXEC GetNextNumberWrap")
next_num = cur.fetchone()[0]
4

我不是Python专家,但我简单看了一下DB-API 2.0,我觉得你应该像这样使用游标的“callproc”方法:

cur.callproc('my_stored_proc', (first_param, second_param, an_out_param))

这样你就可以在返回值中得到结果(输出参数)并存放在“an_out_param”这个变量里。

撰写回答