Pyodbc - Как выполнить оператор select с использованием переменной для параметра

Я пытаюсь выполнить итерацию по всем строкам в таблице с именем Throughput, но для определенного DeviceName (которое я сохранил в data ['DeviceName']. Я пробовал следующее, но это не работает

for row in cursor.execute("select * from Throughput where DeviceName=%s"), %(data['DeviceName']):

EDIT: также пробовал это, но он не работает:

for row in cursor.execute("select * from Throughput where(DeviceName), values(?)", (data['DeviceName']) ):

EDIT2: фрагмент моего последнего рабочего кода:

query = "select * from Throughput where DeviceName = '%s'" % data['Device Name']
 try:
 for row in cursor.execute(query):
2 ответа

Не зная тип столбца DeviceName и какого сервера базы данных, я бы привел строку, которая используется для ограничения DeviceName

"select * from Throughput where DeviceName='%s'" % data['DeviceName']

и посмотрим, что произойдет.


Вы также можете параметризовать утверждения:

...
cursor.execute("select * from Throughput where DeviceName = ?", data['DeviceName'])
...

Это лучший подход по следующим причинам:

  • Защита от SQL-инъекций (вы всегда должны проверять ввод пользователя независимо от того, используется ли параметризованный или динамический SQL)
  • Вам не нужно беспокоиться об исключении значений where where с одинарными кавычками, поскольку параметры передаются в базу данных отдельно
  • SQL готов один раз, последующие исполнения запроса используют подготовленный оператор вместо перекомпиляции

licensed under cc by-sa 3.0 with attribution.