Уведомления

Группа в Telegram: @pythonsu

#1 Июль 18, 2008 06:38:49

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с кастомным SQL

На сколько я понимаю через 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, а выполненный в контроллере - нет.



Офлайн

#2 Июль 18, 2008 16:23:36

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с кастомным SQL

$m1t
На сколько я понимаю через ORM выбрать все core_wallpaper, в имени которых содержится искомая строка, а затем отсортировать их по популярности не удастся
Через `extra` можно попробовать.



Офлайн

#3 Июль 18, 2008 16:31:25

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с кастомным SQL

Daevaorn
мне extra показался сложнее, чем написать sql врукопашную.

а вопрос кстати решился - надо было ставить плейсхолдер %s без кавычек.
(это так, на случай если кто то будет читать это через поисковик)



Офлайн

#4 Июль 18, 2008 16:44:47

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с кастомным SQL

$m1t
мне extra показался сложнее, чем написать sql врукопашную.
А потом ещё объект создавать вручную…не интересно:)



Офлайн

#5 Июль 18, 2008 22:04:10

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с кастомным SQL

Пересмотрел весь свой код - у меня много где написан обычный sql. Там, где join идет вместе с group by, т.е. почти везде. ORM используется вообще редко =(

Я что-то не понимаю в жанговском orm или так и задумано?



Офлайн

#6 Июль 18, 2008 22:10:25

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с кастомным SQL

$m1t
Я что-то не понимаю в жанговском orm или так и задумано?
Скорей всего у тебя очень специфичное приложение или архитектура. Обычно агрегация не часто применяется, а если она очень нужна, то я предпочитая небольшую денормализацию и “легкие запросы”. Итого - всего пара-тройка кастомных запросов на проект и чуть-чуть `extra`.



Офлайн

#7 Июль 19, 2008 00:24:52

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с кастомным SQL

Daevaorn
очень специфичное приложение или архитектура
да вроде бы типичный веб 2.0 - выбрать самые много-тегированные, много-рейтинговые, много-комментированные, много-добавленные-в-избранное…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version