Добавление имени таблицы в SQL-запрос во время выполнения

Я пишу способ, как показано ниже:

def add(self,table_name, tc_no, file_no):
    self._cursor.execute("select HastaId from {}".format(table_name)," where TC=%s and FileNo=%s",(tc_no,file_no))
    row = self._cursor.fetchone()
    return row

и я получил ошибку

TypeError: execute () принимает не более 2 позиционных аргументов (3 задано)

Я знаю ошибку в format(). Как я могу это использовать?


person Cahit Yıldırım    schedule 01.01.2016    source источник


Ответы (1)


Вы правильно поняли. Параметры запроса могут представлять только значения столбца, но не имена столбца или таблицы.

Поэтому вам действительно необходимо использовать форматирование строки, чтобы вставить имя таблицы в текст команды SQL, а затем использовать параметры запроса для предоставления значений для предложения WHERE.

Итак, такая конструкция работать не будет:

crsr.execute(
        "select HastaId from %s where TC=%s and FileNo=%s",
        (table_name, tc_no, file_no))

но это будет работать

crsr.execute(
        "select HastaId from [{}] where TC=%s and FileNo=%s".format(table_name),
        (tc_no, file_no))
person Gord Thompson    schedule 01.01.2016