从 PostgreSQL 存储过程导入 Python 文件
Importing Python file from PostgreSQL stored procedure
在 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 代码没有什么不同 Python:
- How to import a module given the full path?
PL/Python3(不受信任)只是嵌入在 PostgreSQL 后端进程中的 cpython 解释器 运行,作为其自身运行的同一操作系统用户 PostgreSQL。只有很少的差异 - 比如线程安全 - 它只是 Python.
在 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 代码没有什么不同 Python:
- How to import a module given the full path?
PL/Python3(不受信任)只是嵌入在 PostgreSQL 后端进程中的 cpython 解释器 运行,作为其自身运行的同一操作系统用户 PostgreSQL。只有很少的差异 - 比如线程安全 - 它只是 Python.