我试图使用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,"")
...其中entryn
和idn
是两个字符串变量(entry1,entry2 .. id1,id2..etc)
我收到错误
TypeError:函数最多需要3个参数(给定5个)
我的桌子是
image_1d | entry1 | entry2 | entry3 | entry4 | entry5
----------+--------+--------+--------+--------+--------
我该如何解决这个问题?
答案 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
设置为特定值,而是设置为列名。那是对的吗?在这种情况下,您遗憾的是无法使用参数占位符。相反,你必须使用字符串格式,这是我上面建议的。