Имя столбца как переменная в PostgreSql Query - PullRequest
0 голосов
/ 17 марта 2011

я пытался обновить строку за строкой в ​​postgresql, используя python.

использовался код

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 
----------+--------+--------+--------+--------+--------

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

Попробуйте:

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 на конкретное значение, а на имя столбца.Это верно?В этом случае, к сожалению, вы не можете использовать параметр-заполнитель.Вместо этого вы должны использовать форматирование строки, что я и предложил выше.

0 голосов
/ 17 марта 2011

Вы не можете связать имена таблиц или столбцов, только значения, связанные с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...