SQL pyodb c выпуск - PullRequest
       3

SQL pyodb c выпуск

0 голосов
/ 21 января 2020

Я пытаюсь выполнить следующий запрос как подготовленный оператор:

self.cursor.execute("select distinct ? from isap.tn_documentation where ? = '?' and  ? <> ''", attribute2, attribute1, i.text(0), attribute2)

После выполнения я получаю следующую ошибку:

SQL содержит 3 маркера параметров, но были предоставлены 4 параметра ',' HY000

1 Ответ

2 голосов
/ 21 января 2020

Вы не можете передавать имена столбцов в качестве параметров запроса. Вам необходимо объединить имена столбцов в строке запроса (сохраняя значения столбцов в качестве параметров).

Это должно выглядеть следующим образом:

self.cursor.execute(
    "select distinct " 
        + attribute2 
        + " from isap.tn_documentation where " 
        + attribute1 + " = ? and " + attribute2 + " <> ''", 
    i.text(0)
)

Обратите внимание, что при этом подвергается ваш код в SQL внедрение: если ваши атрибуты вводятся извне вашего кода, это серьезное нарушение безопасности. Вам необходимо убедиться, что они не содержат вредоносных данных (например, проверяя значение каждого атрибута по фиксированному списку допустимых значений: это должно быть довольно просто, поскольку мы имеем дело с именами столбцов).

...