列名作为PostgreSql查询中的变量

2024-04-18 03:32:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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和{}是两个字符串变量(entry1,entry2。。id1、id2等)

我有个错误

TypeError: function takes at most 3 arguments (5 given)

我的桌子是

^{pr2}$

我怎么解决这个问题?在


Tags: 代码fromexecutepostgresqlusrtableupdatepr
2条回答

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

尝试:

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是要替换参数占位符的值的列表或元组。在

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

因此,通常情况下,您需要使用类似

^{pr2}$

但在您的例子中,您并没有试图将selected_entry设置为特定值,而是设置为列名。对吗?在这种情况下,很遗憾不能使用参数占位符。相反,您必须使用字符串格式,这是我在上面建议的。在

相关问题 更多 >