如何在pl/python中参数化查询的WHERE子句?
朋友:如何在pl/python中参数化查询的WHERE子句?
一直试图在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;
使用$n
符号:
st = "SELECT name_key,address_key FROM file WHERE foreign_key = $1"
pst = plpy.prepare(st, [ "integer" ])
rv = plpy.execute(pst, [ param_key ])
我不知道你问什么,但如果你想参数化你使用控制在一个查询中使用联接的列,参数不工作是办法。
如果你真的想这样做,你可以随时使用字符串格式化来创建SQL查询,如下所示:
rv = plpy.execute("SELECT name_key, address_key FROM file WHERE %s = %s" %
(foreign_key, param_key))
如果您只是要比较foreign_key
为一个字符串, Paulo有你正在寻找的答案。
当心SQL注入的! – 2011-06-17 04:01:29
如果'param_key ==“2351 AND 1 = 1”'或'param_key ==“2351; UPDATE auth_user SET password ='0w3d'WHERE username ='admin'”''怎么办?危险的东西! '$ n'表示法将通过适当的引用来处理安全问题。 – 2011-06-17 05:06:12
你是对的,如果数据来自用户,那么在用于字符串格式化之前需要对其进行消毒。 – ironchefpython 2011-06-17 05:16:00
Paulo - 正是我需要的!我没有完全得到那个输入格式的'整数',而不是它的实际值。古拉爵! – DrLou 2011-06-19 17:47:04