我在使用Airflow mysqlhook在python中用out参数调用存储过程时遇到问题
存储过程的签名是
创建过程sp_stage_processdata
(在p_status INT中)
src_cursor.execute(“ CALL sp_stage_processdata(%s);”,(状态,))
我遇到错误
OperationalError:(1414,“例程sp_stage_processdata的OUT或INOUT参数1不是触发器之前的变量或NEW伪变量”)
在处理上述异常期间,发生了另一个异常:
我尝试删除参数,并且过程在python上执行良好,所以没有错。
由于版本问题,我无法使用cursor.callproc。
答案 0 :(得分:0)
使用OUT
时,您需要将MySQL变量传递给调用,并且不能直接传递值。
它看起来应该像这样:
CALL sp_stage_processdata(@p_status)
如果您需要处理传递的值,则可以有2个选项:
OUT
更改为INOUT
并使用SET @p_status
,然后调用您的过程将您的过程拆分为使用IN
和OUT
,如下所示:
sp_stage_processdata(out p_status_out INT, IN p_status)
因此您可以像这样调用过程:
src_cursor.execute("CALL sp_stage_processdata(@p_status_out, %s);", (status,))