Pl \ Python:导入模块时出现问题

时间:2018-08-13 07:36:13

标签: python postgresql-10 plpython

我已经在Windows 10(64位)计算机上的Postgresql 10(64位)中成功设置了plpyton3u扩展名。但是,当我尝试通过调用请求模块发出http请求时,出现属性错误AttributeError:'module'对象没有属性'get'。这是我正在使用的代码

CREATE OR REPLACE FUNCTION from_url(
-- The URL to download.
IN url text,
-- Should any errors (like HTTP transport errors)
-- throw an exception or simply return default_response
IN should_throw boolean DEFAULT true,
-- The default response if any errors are found.
-- Only used when should_throw is set to true
IN default_response text DEFAULT E''
)
    RETURNS text
AS $$
    # We will use traceback so we get decent error reporting.
    import requests
    import traceback

    # Either throws an error or returns the defeault response
    # depending on the should_throw parameter of the from_url() function
    def on_error():
        if should_throw:
            # plpy.error() throws an exception which stops the current transaction
            plpy.error("Error downloading '{0}'\n {1}".format(url, traceback.format_exc()))
        else:
            return default_response
    try:
        response = requests.get(url)
        return response.data
    except:
        # Log and re-throw the error or return the default response
        return on_error()


$$ LANGUAGE plpython3u VOLATILE;

select from_url(<SOME_DATA_FETCHING_URL>);

其中SOME_DATA_FETCHING_URL是提供数据的服务器的URL。当我运行此代码时,它将引发以下错误

  

错误:plpy。错误:下载SOME_DATA_FETCHING_URL时出错    追溯(最近一次通话):     __plpython_procedure_from_url_24640中的文件“”,第16行   AttributeError:“模块”对象没有属性“获取”

     

上下文:回溯(最近一次拨打电话):    PL / Python函数“ from_url”,第19行,在      返回on_error()    PL / Python函数“ from_url”,行11中的on_error      plpy.error(“下载'{0}'\ n {1}时出错。.format(url,traceback.format_exc()))   PL / Python函数“ from_url”   SQL状态:XX000

我的PYTHONPATH设置为C:\ Python34 \; C:\ Python34 \ Scripts; C:\ Python34 \ Lib;

我在python命令提示符下进行了检查,我能够导入请求并成功运行get命令。

我是否缺少PostGRESQL中的任何设置?哪能让我成功运行此代码?

1 个答案:

答案 0 :(得分:0)

(如果其他人迷失了这个问题),我有一个类似的问题,在我看来,这是由于用户'postgres'对包含我的Python模块的目录的访问权限不足引起的。我了解到的一件事是,要使用Python命令提示符检查PL / Python问题,总是有必要以与Postgres服务器(在我的情况下为“ postgres”)相同的用户身份运行它