Форум сайта python.su
0
Всем привет.
Пишу вот такой запрос:
search = strip_tags(request.POST["search"])
searchMas = search.split(" ")
like = ''
l = len(searchMas)
cursor = connection.cursor()
i = 1
for s in searchMas:
if i != l:
like += "content LIKE '%"+s+"%' or "
else:
like += "content LIKE '%"+s+"%' "
i += 1
query = "SELECT id,content, url \
FROM statpages_statpages \
WHERE "+ like
cursor.execute(query)
not enough arguments for format string
Request Method: POST
Request URL: http://127.0.0.1:8000/search/
Django Version: 1.3.1
Exception Type: TypeError
Exception Value:
not enough arguments for format string
Exception Location: C:\Python27\lib\site-packages\django\db\backends\__init__.py in last_executed_query, line 505
Python Executable: C:\Python27\python.exe
Python Version: 2.7.2
Офлайн
52
Google:
django raw sql like
Офлайн
0
Почитал повнимательнее доку. django экранирует символы % и _.
Тогда вопрос немного поменяется. Есть встроенный фильтр __icontains = ‘фраза/слово/число’. Есть список слов, по которым надо искать совпадения в базе. Возможно ли подставить список слов(длина произвольная) в этот фильтр? Т.е. если в аналогии с SQL, то должно полуться что-то вроде этого:
SELECT id, content, url
FROM statpages_statpagesоб
WHERE content LIKE '%слово1%' or
content LIKE '%слово2%' or
content LIKE '%слово3%' or
....
content LIKE '%словоN%'
Отредактировано -=Рюкзак с ушами=- (Апрель 4, 2012 09:58:34)
Офлайн
52
Организовывать поиск лучше готовыми решениями (например, haystack). Логические операции в количестве n+2 штуки в коде - это не айс.
Офлайн
3
С использованием Q как то так
q = Q(['content__icontains', 'word1']) words = ['word2', 'word3'] for word in words: q.add(Q(['content__icontains', word]), 'OR') SomeModel.objects.filter(q)
Офлайн
0
Chernспасибо, попробую.
fata1exспасибо. а можно немного по-подробнее, ибо в django новичек и хотелось бы разные варианты пробовать. Там только джанго-приложение(haystack) установить, или ещё доп. либы или сервисы?
Офлайн
52
haystack.com:
Get started
Install the package:
Latest stable (1.2.6) off PyPI: pip install django-haystack
Latest dev (2.0.0-beta) off GitHub: pip install -e git+https://github.com/toastdriven/django-haystack.git@master#egg=django-haystack
Add haystack to your INSTALLED_APPS.
Create search_indexes.py files for your models.
Setup the main SearchIndex via autodiscover.
Include haystack.urls to your URLconf.
Search!
More information in the full documentation.
Отредактировано fata1ex (Апрель 4, 2012 11:14:55)
Офлайн