Найти - Пользователи
Полная версия: Проблемы с кастомным SQL
Начало » Django » Проблемы с кастомным SQL
1
$m1t
На сколько я понимаю через ORM выбрать все core_wallpaper, в имени которых содержится искомая строка, а затем отсортировать их по популярности не удастся, а потому пишу следующее:
sql = """
SELECT core_wallpaper.id, SUM(core_rating.value) AS val
FROM core_wallpaper INNER JOIN core_rating ON
core_wallpaper.id = core_rating.wallpaper_id
WHERE core_wallpaper.name LIKE "%s"
GROUP BY core_wallpaper.id
ORDER BY val DESC;
"""
cursor = connection.cursor()
cursor.execute(sql, ["%" + query + "%"])
print sql % query
result = cursor.fetchall()
print len(result)
return HttpResponse(result)
Проблемы с этим кодом две, обе связаны с LIKE.
1) Не понятно куда втыкать знаки % что бы они не за экранировались.
2) Запросы выполненные через контроллер и выполненные в коммандной строке MySQL отличаются. Например:
SELECT core_wallpaper.id, SUM(core_rating.value) AS val 
FROM core_wallpaper INNER JOIN core_rating ON
core_wallpaper.id = core_rating.wallpaper_id
WHERE core_wallpaper.name LIKE "111"
GROUP BY core_wallpaper.id
ORDER BY val DESC;
в коммандной строке находит единственный существующий элемент core_wallpaper с именем 111, а выполненный в контроллере - нет.
Александр Кошелев
$m1t
На сколько я понимаю через ORM выбрать все core_wallpaper, в имени которых содержится искомая строка, а затем отсортировать их по популярности не удастся
Через `extra` можно попробовать.
$m1t
Daevaorn
мне extra показался сложнее, чем написать sql врукопашную.

а вопрос кстати решился - надо было ставить плейсхолдер %s без кавычек.
(это так, на случай если кто то будет читать это через поисковик)
Александр Кошелев
$m1t
мне extra показался сложнее, чем написать sql врукопашную.
А потом ещё объект создавать вручную…не интересно:)
$m1t
Пересмотрел весь свой код - у меня много где написан обычный sql. Там, где join идет вместе с group by, т.е. почти везде. ORM используется вообще редко =(

Я что-то не понимаю в жанговском orm или так и задумано?
Александр Кошелев
$m1t
Я что-то не понимаю в жанговском orm или так и задумано?
Скорей всего у тебя очень специфичное приложение или архитектура. Обычно агрегация не часто применяется, а если она очень нужна, то я предпочитая небольшую денормализацию и “легкие запросы”. Итого - всего пара-тройка кастомных запросов на проект и чуть-чуть `extra`.
$m1t
Daevaorn
очень специфичное приложение или архитектура
да вроде бы типичный веб 2.0 - выбрать самые много-тегированные, много-рейтинговые, много-комментированные, много-добавленные-в-избранное…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB