Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新行的plpython函数不起作用_Python_Postgresql - Fatal编程技术网

更新行的plpython函数不起作用

更新行的plpython函数不起作用,python,postgresql,Python,Postgresql,我正在使用PostgreSQL 9.4.7和Python 2.7.6。我正在编写一个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, usernam

我正在使用PostgreSQL 9.4.7和Python 2.7.6。我正在编写一个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 DB中成功创建此函数,但当我试图通过postgres shell上的以下命令执行此函数时-
选择更新用户(1)xyz@xyz.com@sifymail.com“,”更新名称“
我收到以下错误-
错误:列“amarshukla@sifymail.com“不存在
第1行:选择更新用户(1)amarshukla@sifymail.com","地狱",

有人能告诉我哪里出错了吗?

首先,postgresql中的字符串文字必须用单引号括起来,而不是用双引号括起来:

select update_user(1,'xyz@xyz.com@sifymail.com','updatedname');
双引号用于引用列

第二。prepare函数中的参数列表不是正确的python列表。它应该是这样的:

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

非常感谢你。第一个错误我马上就发现了,但在过去的几个小时里,我一直在努力解决第二个错误。我的代码与您的建议配合得很好。