如何在pl/python中对查询的WHERE子句进行参数化?

2 投票
2 回答
1726 浏览
提问于 2025-04-16 19:45

朋友们:

我一直在尝试在pl/python中把查询参数化,但肯定是漏掉了什么简单的东西;我试过在变量名前加%和$,但是都没有成功。

(另外,我也没法把结果变量传到python日志里,不过这是另一个问题!我已经设置好日志了,可以发送字符串到日志里,但为了清晰起见,这里省略了很多代码)

CREATE OR REPLACE FUNCTION footest0 (param_key integer) RETURNS text AS $$

# 1) SELECT from record based on parameter param_key:

rv = plpy.execute("SELECT name_key,address_key FROM file WHERE foreign_key = param_key)

name = rv[0]["name"]
address = rv[0]["address"]

# how to put results into the log?:
logging.info('  record: %(case)s')

$$ LANGUAGE plpythonu;

2 个回答

2

我不太确定你具体在问什么,但如果你是想给用来控制查询连接的列设置参数,那参数是不能那样用的。

如果你真的想这么做,可以使用字符串格式化来创建你的SQL查询,像下面这样:

rv = plpy.execute("SELECT name_key, address_key FROM file WHERE %s = %s" %
                  (foreign_key, param_key))

如果你只是想把foreign_key和一个字符串进行比较,Paulo已经给出了你想要的答案。

3

使用 $n 这种写法:

st = "SELECT name_key,address_key FROM file WHERE foreign_key = $1"
pst = plpy.prepare(st, [ "integer" ])
rv = plpy.execute(pst, [ param_key ])

撰写回答