pyodbc - как выполнить оператор выбора, используя переменную для параметра - PullRequest
10 голосов
/ 01 марта 2012

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

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

РЕДАКТИРОВАТЬ: также пробовал это, но это не работает:

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

РЕДАКТИРОВАТЬ 2: фрагмент моего окончательного рабочего кода:

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

Ответы [ 2 ]

42 голосов
/ 01 марта 2012

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

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

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

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

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

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

и посмотрим, что получится.

...