Как параметризировать предложение WHERE в запросе в pl / python? - PullRequest
2 голосов
/ 17 июня 2011

Друзья:

Попытка параметризовать запрос в pl / python - и, конечно, здесь не хватает чего-то простого;Я пробовал% и $ prepends к имени переменной, но не повезло.

(также не смог передать переменную результата в журнал Python - но это проблема diff! У меня естьжурнал настроен - может отправлять ему буквальные строки - но для ясности здесь вырезано много кода)

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 ]

3 голосов
/ 17 июня 2011

Используйте запись $n:

st = "SELECT name_key,address_key FROM file WHERE foreign_key = $1"
pst = plpy.prepare(st, [ "integer" ])
rv = plpy.execute(pst, [ param_key ])
2 голосов
/ 17 июня 2011

Я не уверен, что именно вы спрашиваете, но если вы пытаетесь параметризовать столбцы, которые вы используете для управления объединением в запросе, параметры не работают таким образом.

Если вы действительно пытаетесь это сделать, вы всегда можете использовать форматирование строки для создания SQL-запроса, например:

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

Если вы просто хотите сравнить foreign_key со строкой, у Пауло есть ответ, который вы ищете.

...