2011-03-17 93 views
0

我試圖更新由排在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是兩個字符串變量(取值範,ENTRY2 .. ID1,id2..etc)

我得到一個錯誤

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

我的表是

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

我該如何解決這個問題?

回答

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,平時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爲特定的值,而是列名。那是對的嗎?在這種情況下,您不幸的是不能使用參數佔位符。相反,你必須使用字符串格式,這正是我上面提到的。

0

您不能綁定表或列名,只有與之關聯的值。

+0

如果我的值是id1,1d2等我可以使用它作爲在查詢與IDN = 「ID」 IDN = IDN + STR(ⅰ)IDN – Ria 2011-03-17 02:36:38