从一个python模块,从pl / python函数调用,如何获取返回值?

时间:2011-09-21 16:49:58

标签: python postgresql plpython

这个函数调用是否有任何原因不会返回'result'?

CREATE OR REPLACE FUNCTION myfunction (input int, OUT result int) AS $$

result = mymodule.object(input,plpy)
plpy.info(" ========= EXTRA-module result: ===",result)

$$ LANGUAGE plpythonu;

=== mymodule的内容============

def object(input,plpy):
  import StringIO
  try:
   plan = plpy.prepare("INSERT INTO file VALUES (nextval('primary_sequence'),$1) RETURNING primary_key", ["integer"] )
  except:
   plpy.error(traceback.format_exc())

  try:
   rv = plpy.execute(plan, [ input ])
   result = rv[0]["primary_key"]
   plpy.info(" ========= INTRA-module result: ===",result)
   return result
  except:
   plpy.error(traceback.format_exc())

2 个答案:

答案 0 :(得分:1)

我不熟悉plpython,但是如果它出现错误并且没有打印出来或者进一步传递到链条上你将永远不会知道。

我不知道您是否正在使用命令行进行测试,但尝试在您的except块中添加一个print语句,以查看它是否只是错误输出而不是返回。

答案 1 :(得分:1)

@ed。实际上并不需要RETURNS语法而不是OUT,但是你的建议让我得到答案。是的,我觉得自己像个假人。这是让别人回顾一个人工作的美好。

添加了返回结果,事情很顺利。我在这里做的关键假设是结果=语法实际上没有在调用函数的范围内完成返回。卫生署!

CREATE OR REPLACE FUNCTION myfunction (input int, OUT result int) AS $$

result = mymodule.object(input,plpy)
plpy.info(" ========= EXTRA-module result: ===",result)
# This was the key bit:
return result

$$ LANGUAGE plpythonu;