返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

40.3. 数据库访问

发布于 2019-09-30 03:09:48 字数 2156 浏览 1024 评论 0 收藏 0

PL/Python 语言模块自动输入一个叫 plpy 的 Python 模块。在这个模块里的函数和常量可以在 Python 代码里以 plpy.foo 的名字获得。目前,plpy 实现了函数 plpy.debug(msg), plpy.log(msg), plpy.info(msg), plpy.notice(msg), plpy.warning(msg), plpy.error(msg), plpy.fatal(msg)plpy.errorplpy.fatal 实际上抛出一个 Python 异常,如果你没有捕获这个异常,则会传播到调用的查询,导致当前事务或者子事务退出。raise plpy.ERROR(msg)raise plpy.FATAL(msg) 分别等效于调用 plpy.errorplpy.fatal 。其它函数只生成不同优先级的信息。特定优先级的信息是汇报给客户端、写到服务器日志、还是两件事都做,是由 log_min_messages 和 client_min_messages 配置参数控制的。参阅章17获取更多信息。

另外,plpy 模块提供两个函数,叫 executeprepare 。拿一个查询字符串和一个可选的限制参数调用 plpy.execute 可以运行该查询,并且结果返回到一个结果对象里。结果对象仿真一个列表或者一个字典对象。结果对象可以通过行号和字段名来访问。它有下面这些额外的方法:nrows 返回该查询返回的行数,而 statusSPI_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)

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

在你用 PL/Python 模块准备一个计划的时候,该计划是自动保存的。请阅读 SPI 文档(章41)获取这句话的含义。为了能跨函数调用有效地使用这个特点,需要使用永久存储字典 SDGD 之一(参阅节40.1)。比如:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文