PostgreSql查询中的列名作为变量

0 投票
2 回答
2187 浏览
提问于 2025-04-16 13:52

我在用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...等等)

但是我遇到了一个错误

TypeError: 函数最多接受3个参数(给了5个)

我的表格是

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

我该怎么解决这个问题呢?

2 个回答

0

你不能把表格或列的名字绑定起来,只能绑定与它们相关的值。

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 是一个值的列表或元组,用来替换参数占位符。

对于 Postgresql,常用的数据库驱动程序 pyscopg 使用问号作为参数占位符。

所以,通常你会想用类似这样的代码:

sql='''UPDATE im_entry.pr_table 
           SET selected_entry  = ?
           FROM im_entry.usr_table 
           WHERE im_entry.pr_table.image_1d = ?'''

但是在你的情况下,你并不是想把 selected_entry 设置为一个具体的值,而是想把它设置为一个列名,对吗?如果是这样的话,很遗憾,你不能使用参数占位符。相反,你需要使用字符串格式化,这就是我上面提到的。

撰写回答