↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本。 PostgreSQL 9.0 已结束支持。 2015-10-08. 请参阅 当前版本手册.

42.7. 数据库访问 #

PL/Python 语言模块会自动导入一个名为plpy的 Python 模块。该模块中的函数和常量在 Python 代码中可以通过plpy.foo这样的形式访问。

plpy 模块提供了两个函数:execute 和 prepare。使用查询字符串和一个可选的限制参数调用 plpy.execute 会执行该查询,并把结果在一个结果对象中返回。结果对象模拟了列表或字典对象。可以通过行号和列名访问结果对象。它还有这些附加方法:nrows 返回查询返回的行数,status 是 SPI_execute() 的返回值。结果对象可以被修改。

例如:

rv = plpy.execute("SELECT * FROM my_table", 5)

会从 my_table 中返回最多 5 行。如果 my_table 有一列名为 my_column,则可以这样访问它:

foo = rv[i]["my_column"]

第二个函数 plpy.prepare 为查询准备执行计划。若查询中有参数引用,则它以查询字符串和参数类型列表作为参数。例如:

plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", [ "text" ])

text 是你要传给 $1 的变量的类型。准备好语句之后,使用函数 plpy.execute 运行它:

rv = plpy.execute(plan, [ "name" ], 5)

第三个参数是限制,它是可选的。

查询参数和结果行字段会按照第 42.3 节中所述,在 PostgreSQL 与 Python 数据类型之间进行转换。

当你使用 PL/Python 模块准备一个计划时,它会被自动保存。关于这意味着什么,请参阅 SPI 文档(第 43 章)。为了在函数调用之间有效利用这一点,需要使用持久存储字典 SD 或 GD 之一(见第 42.4 节)。例如:

CREATE FUNCTION usesavedplan() RETURNS trigger AS $$
    if SD.has_key("plan"):
        plan = SD["plan"]
    else:
        plan = plpy.prepare("SELECT 1")
        SD["plan"] = plan
    # rest of function
$$ LANGUAGE plpythonu;

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.