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

时间:2011-06-17 03:32:57

标签: python plpython

朋友们:

一直试图在pl / python中对参数进行参数化 - 我肯定在这里缺少一些简单的东西;我已经尝试了%和$ prepends变量名,没有运气。

(也无法将结果变量传递给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 个答案:

答案 0 :(得分: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 ])

答案 1 :(得分:2)

我不确定你究竟在问什么,但是如果你试图对你用来控制查询连接的列进行参数化,那么参数就不会那么有效。

如果您真的想这样做,您可以随时使用字符串格式来创建SQL查询,如下所示:

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

如果您只想将foreign_key与字符串进行比较,那么Paulo会为您提供答案。