Использование% в предложении like оператора select в python
import pypyodbc as pyodbc
model_name = 'test'
model_name1 = Master_Cursor.execute("select col1,col2,col3 from tablename where col3 like '%s' order by col3" %(model_name)).fetchall()
Приведенный выше код возвращает одну запись, соответствующую model_name = test
, Как бы мне вернуть другие записи, имеющие model_name=123test123,abctestabc,ABCtestABC
так далее??
В основном ищу
select col1,col2,col3 from tablename where col3 like '%test%'.
2 ответа
model_name1 = Master_Cursor.execute("select col1,col2,col3 from tablename where col3 like '%%%s%%' order by col3" %(model_name)).fetchall()
Используйте 2 процента, чтобы представить символ реального процента
Не используйте форматирование строк для вставки переменных в ваши запросы, это открывает вам риск внедрения SQL-кода (см., Например, Что такое SQL-внедрение?) Вместо этого, согласно документации, вы должны использовать ?
представлять переменные в запросе, и позволить библиотеке выйти и вставить их соответствующим образом.
Далее, вам нужно включить подстановочные знаки вместе с model_name
если вы хотите более слабое соответствие. На данный момент вы создаете:
select col1,col2,col3 from tablename where col3 like 'test' order by col3
Вы должны окружить model_name
с подстановочными знаками перед передачей его в запрос, например, используя '%%%s%%' % model_name
(обратите внимание, что вам нужно повторить каждый %
чтобы избежать этого в printf
-стиль форматирования) или один из более современных вариантов форматирования строки.
В этом случае, например (используя str.format
):
model_name1 = Master_Cursor.execute(
"select col1, col2, col3 from tablename where col3 like ? order by col3",
("%{}%".format(model_name),)
).fetchall()
Следующее должно работать:
pattern = "%"+model_name+"%"
db.execute("select col1,col2,col3 from tablename where col3 like :s order by col3" ,{"s":pattern}).fetchall()