我已经在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中的任何设置?哪能让我成功运行此代码?
答案 0 :(得分:0)
(如果其他人迷失了这个问题),我有一个类似的问题,在我看来,这是由于用户'postgres'对包含我的Python模块的目录的访问权限不足引起的。我了解到的一件事是,要使用Python命令提示符检查PL / Python问题,总是有必要以与Postgres服务器(在我的情况下为“ postgres”)相同的用户身份运行它