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,"")
...其中 entryn
和 idn
是两个字符串变量(比如 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
设置为一个具体的值,而是想把它设置为一个列名,对吗?如果是这样的话,很遗憾,你不能使用参数占位符。相反,你需要使用字符串格式化,这就是我上面提到的。