首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PL/Python函数之间重用纯Python函数

在PL/Python函数之间重用纯Python函数
EN

Stack Overflow用户
提问于 2014-02-08 04:01:38
回答 2查看 1.4K关注 0票数 6

我想在两个或多个PL/Python函数之间声明和共享一些简单的纯python函数。我用的是Postgres 9.3。

例如,我有:

代码语言:javascript
复制
 CREATE OR REPLACE FUNCTION get_mod(modifier varchar)
  RETURNS varchar
    AS $$
      def is_float(val):
        try:
            if val:
               float(val)
               return True
            else:
               return False
        except ValueError:
            return False
      if modifier is None:
        return "NOMOD"
      if is_float(modifier):
        return str(float(modifier)*1)
      return modifier
    $$ LANGUAGE plpythonu;

我想在其他PL/Python函数中使用函数is_float。我知道我可以将它创建为可调用的PL/Python函数,但我发现比直接调用一个纯Python定制实用程序函数更笨重(执行基于SQL的PL/Python调用)。

是否可以通过PL/Python在Postgres上创建和公开可重用的纯Python函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-24 07:32:56

我通常做的是使用GD传递函数。缺点是,由于GD是每个会话对象,所以每次启动新会话时都需要加载它。处理这个问题的方法是在每个会话开始时运行一个引导函数,该函数将为数据库的进一步使用提供参考。类似于:

代码语言:javascript
复制
create or replace function bootstrap() returns void
as
$$
def is_float(val):
  # did some simplifying here, 
  try:   
    float(val) # Take notice that booleans will convert to float successfully
    return True
  except (ValueError, TypeError):
    return False

GD['is_float'] = is_float
$$ language plpythonu;

现在您可以修改您的原始函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION get_mod(modifier varchar)
 RETURNS varchar
    AS $$
      # Optionally run bootstrap() here
      plpy.execute("select bootstrap()")
      ###
      if modifier is None:
        return "NOMOD"
      if GD['is_float'](modifier):
        return str(float(modifier)*1)
      return modifier
    $$ LANGUAGE plpythonu;

为了使其工作,您必须在每个会话开始时运行select bootstrap();,或者作为作为流的一部分调用的第一个函数的一部分.或者是作为你最初功能的一部分。

票数 5
EN

Stack Overflow用户

发布于 2014-02-08 04:19:57

一个选项是创建一个模块,然后导入它。您可以按照描述的PYTHONPATH将其位置添加到这里中,以确保运行时能够找到它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21641722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档