gpt4 book ai didi

python - MySQLdb 存储过程输出参数不起作用

转载 作者:太空狗 更新时间:2023-10-29 21:43:14 25 4
gpt4 key购买 nike

我有一个托管在 Google Cloud SQL 上的数据库,以及一个用于查询它的 python 脚本。

我正在尝试调用具有输出参数的存储过程。 SP调用成功,但是Out参数的值好像没有返回到我的python代码中。

例如,这里是取自here的例子:

乘法存储过程的定义:

CREATE PROCEDURE multiply(IN pFac1 INT, IN pFac2 INT, OUT pProd INT)
BEGIN
SET pProd := pFac1 * pFac2;
END

如果我像这样从命令行调用 SP:

CALL multiply(5, 5, @Result)
SELECT @Result

我正确地得到了结果:

+---------+
| @Result |
+---------+
| 25 |
+---------+

但是如果我使用 MySQLdb 包用 python 代码调用它,就像这样:

args = (5, 5, 0) # 0 is to hold value of the OUT parameter pProd
result = cursor.callproc('multiply', args)
print result

然后我没有在我的结果元组中得到 out 参数:

(5, 5, 0)

那么,我做错了什么?

更新:刚刚在 callproc 代码中发现了这个警告:

    Compatibility warning: PEP-249 specifies that any modified
parameters must be returned. This is currently impossible
as they are only available by storing them in a server
variable and then retrieved by a query. Since stored
procedures return zero or more result sets, there is no
reliable way to get at OUT or INOUT parameters via callproc.
The server variables are named @_procname_n, where procname
is the parameter above and n is the position of the parameter
(from zero). Once all result sets generated by the procedure
have been fetched, you can issue a SELECT @_procname_0, ...
query using .execute() to get any OUT or INOUT values.

另请注意,callproc 函数仅返回相同的输入 arg 元组。所以底线是这是不可能的。然后回到绘图板...

最佳答案

您只需要一个额外的 SELECT 来访问输出值:

>>> curs.callproc('multiply', (5, 5, 0))
(5, 5, 0)
>>> curs.execute('SELECT @_multiply_0, @_multiply_1, @_multiply_2')
1L
>>> curs.fetchall()
((5L, 5L, 25L),)

关于python - MySQLdb 存储过程输出参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24139849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com