【问题标题】:Importing Python file from PostgreSQL stored procedure [duplicate]从 PostgreSQL 存储过程导入 Python 文件 [重复]
【发布时间】:2015-09-07 07:16:24
【问题描述】:

可以在 PostgreSQL 存储过程中包含 Python 代码。例如:

CREATE FUNCTION someProc()
RETURNS void AS $$
    # Some Python3 code...
$$ LANGUAGE plpython3u;

但是我怎样才能在这段代码中包含一个 python 文件呢?

在PostgreSQL中运行的Python的当前目录是这样的:

>>> os.getcwd()
... /var/lib/postgresql/9.3/main

我尝试了以下方法,效果很好:

CREATE FUNCTION someProc()
RETURNS void AS $$
    import sys
    sys.path.append("/dir/to/file")
    from python_file import pythonFunction
    # More Python code
$$ LANGUAGE plpython3u;

由于许多明显的原因,这似乎不太好。有没有更好的方法来导入 python 文件,或者只是从 python 文件中调用 python 函数?

编辑: 没有任何特定的 PostgreSQL 方法可以导入文件。但最好的方法是在下面的正确答案中,这类似于我原来的解决方案,但更好。

【问题讨论】:

    标签: python postgresql stored-procedures


    【解决方案1】:

    这与在独立 Python 中从文件中动态加载 Python 代码没有什么不同:

    PL/Python3 (untrusted) 只是嵌入在 PostgreSQL 后端进程中的 cpython 解释器,与它自己运行的操作系统用户 PostgreSQL 相同。只有很少的区别——比如线程安全——它只是 Python。

    【讨论】:

    • 谢谢,虽然我不会真的认为这是一个重复的问题,因为我是来找一个特定的 PostgreSQL 存储过程方法发现没有的,而解决方案实际上是一个更通用的 Python 方法.但再次感谢您!
    • 当然 - 提问很有帮助,现在这个问题将在人们寻找 PL/PgSQL 时指出更一般的答案。如果我认为它是 100% 重复的,我会直接将其作为一个副本关闭而不发布答案。
    • 啊,好吧,我以为这个问题会被删除之类的。很抱歉造成混乱,再次感谢。
    【解决方案2】:

    您是否从文档中看到了这一点?

    http://www.postgresql.org/docs/9.0/static/plpython.html

    【讨论】:

    • 嗯,是的,我查看了文档,但没有找到解决方案。
    • plpython 文档中的什么地方是指读取外部文件以加载 Python 代码?我认为你没有完全阅读这个问题。
    猜你喜欢
    • 2011-01-19
    • 2020-10-30
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多