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