#python #mysql #sql #django
#python #mysql #sql #django
Вопрос:
Я пытаюсь выполнить поиск в своей mysql
базе данных с помощью LIKE
инструкции :
indexstr = request.GET['index']
indexstr = '%' indexstr '%'
offset = int(request.GET['offset'])
for row_data in advertisement.objects.raw(
'select * from requests_advertisement WHERE short_description LIKE ' indexstr ' LIMIT 10 OFFSET ' str(offset*5)):
Но у него есть эта ошибка:
Изображение ошибки
Кажется, что он не может работать с %
символом. Когда я удаляю %
, он работает правильно.
Комментарии:
1. Выполняемый код и «работающий правильно» — это две разные вещи. Не используйте конкатенацию строк для построения ваших запросов, это риск внедрения SQL.
2. Я не знаю точных настроек здесь, но что-то вроде
cursor.execute("""select * from requests_advertisement WHERE short_description LIKE %s""", ('%' indexstr '%',))
Ответ №1:
Здесь нет причин использовать необработанный запрос. Вам нужен __icontains
поиск:
advertisement.objects.filter(short_description__icontains=request.GET["index"])
Комментарии:
1. Большое спасибо, это сработало ;-), обладает ли он такой же производительностью и скоростью, что и запрос с оператором like. а как насчет «сопоставить () с () запросом»?