2016-04-05 4 views
1

Я использую PostgreSQL 9.4.7 и Python 2.7.6. Я пишу функцию plpython обновить строку в таблице пользователей и мой код, как показано ниже -Функция plpython для обновления строки не работает

CREATE FUNCTION update_user(myid int, mymail text, myname text) RETURNS text AS $$ 
    from plpy import spiexceptions 
    plan=plpy.prepare("UPDATE auth_user SET email=$2, username=$3 WHERE id = $1", 
    ["int"] ["text"]["text"]) 
    rv=plpy.execute(plan, [myid,myemail,myusername]) 
    return rv 
    $$ LANGUAGE plpythonu; 

Я могу создать эту функцию успешно в Postgres БД, но в то время как я пытаюсь выполнить его с помощью следующей команды на postgres shell-
выберите update_user (1, "xyz @ xyz.com @ sifymail.com", "updatedname");
Я получаю следующее сообщение об ошибке -
ОШИБКА: колонка "[email protected]" не существует
ЛИНИЯ 1: выберите update_user (1, "[email protected]", "ад");
Может кто-нибудь указать мне, где я делаю ошибку?

ответ

1

Прежде всего, строковые литералы в PostgreSQL должны быть окружены одинарные кавычки, а не двойные из них:

select update_user(1,'[email protected]@sifymail.com','updatedname'); 

Двойные кавычки используются для обозначения столбцов.

Второй. Список аргументов в вашей функции подготовки не соответствует списку python. Он должен выглядеть так:

plpy.prepare("UPDATE auth_user SET email=$2, username=$3 WHERE id = $1", 
      ["int", "text", "text"]) 
+0

спасибо. первая ошибка, которую я выяснил мгновенно, но боролся со вторым с последних нескольких часов. Мой код отлично работает с вашим предложением. – Amar

Смежные вопросы