pyodbc - как выполнить инструкцию select, используя переменную для параметра

Я пытаюсь перебрать все строки в таблице с именем пропускная способность, но для определенного 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 с одинарными кавычками, поскольку параметры передаются в базу данных отдельно
  • SQL-это как-то подготовлена , последующие выполнения запроса используют подготовленный оператор вместо перекомпиляции