列名作为PostgreSql查询中的变量

时间:2011-03-17 02:28:40

标签: python sql postgresql

我试图使用python在postgresql中逐行更新表。

使用的代码是

cursor.execute("UPDATE im_entry.pr_table 
                   SET selected_entry = im_entry.usr_table.",entryn," 
                  FROM im_entry.usr_table 
                 WHERE im_entry.pr_table.image_1d = ",idn,"")

...其中entrynidn是两个字符串变量(entry1,entry2 .. id1,id2..etc)

我收到错误

  

TypeError:函数最多需要3个参数(给定5个)

我的桌子是

image_1d | entry1 | entry2 | entry3 | entry4 | entry5 
----------+--------+--------+--------+--------+--------

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您不能绑定表名或列名,只能绑定与它们关联的值。

答案 1 :(得分:0)

尝试:

cursor.execute(
    '''UPDATE im_entry.pr_table 
       SET selected_entry  = im_entry.usr_table.{0}
       FROM im_entry.usr_table 
       WHERE im_entry.pr_table.image_1d = ?'''.format(entryn),[idn])

通常,您需要调用cursor.execute(sql,args),其中sql是参数化的sql查询,args是要替换参数占位符的值列表或元组。< / p>

对于Postgresql,通常的db驱动程序pyscopg对参数占位符使用问号。

因此,通常,你想要使用像

这样的东西
sql='''UPDATE im_entry.pr_table 
           SET selected_entry  = ?
           FROM im_entry.usr_table 
           WHERE im_entry.pr_table.image_1d = ?'''

但在您的情况下,您并不是要将selected_entry设置为特定值,而是设置为列名。那是对的吗?在这种情况下,您遗憾的是无法使用参数占位符。相反,你必须使用字符串格式,这是我上面建议的。