Форум сайта python.su
Здраствуйте.
код который хочу запихнуть в objects.extra:
SELECT count (*) FROM feedback_reviews,feedback_goods where feedback_reviews.goods_id=feedback_goods.id and feedback_goods.id=1
s = Goods.objects.extra(
select={
'entry_count': 'SELECT count (*) FROM feedback_reviews,feedback_goods where feedback_reviews.goods_id=feedback_goods.id'
},
)
Офлайн
всё гораздо проще) уберите пробел между именем функции count и скобками
Офлайн
а зачем через extra? метод count() вроде есть же
Офлайн
romankrvДжанга тут не причем. Просто внешний запрос(по отношению к этому) и так имееn правильный `FROM` c таблицей `goods`
по ходу вопрос это почему в документации в селекте после ключевого слова FROM прописана одна таблица хотя скрипт делает выборку из двух связанных таблицах. Или джанга сама добирает название недостающие после фром
Офлайн
В продолжении темы возник вопрос:
В документации написано что после этого кода у меня появиться дополнительный атрибут у каждого объекта…
цитата:
As a result, each Entry object will have an extra attribute, is_recent, a boolean representing whether the entry’s pub_date is greater than Jan. 1, 2006.
но я хочу спосить так как этого атрибута я в упор не вижу и ipython его не выводит
в доке
http://www.djangoproject.com/documentation/db-api/#extra-select-none-where-none-params-none-tables-none-order-by-none-select-params-none
как то обтекаемо описано про это и нет примера использования этого атрибута “is_recent”
мой код
s = Goods.objects.extra(
select={
‘is_recent": ’SELECT count(*) FROM feedback_reviews,feedback_goods where feedback_reviews.goods_id=feedback_goods.id'
},
)
Еще один момент
цитата из того же раздела: Note that the parenthesis required by most database engines around subqueries are not required in Django’s select clauses. Also note that some database backends, such as some MySQL versions, don’t support subqueries.
ну здесь по английскии написано что мускуль на поддерживает подзапросы
Но идем на http://dev.mysql.com/doc/refman/4.1/en/subqueries.html
из официальной доки мускуля получается что можно и оно работает проверял
Кто то может разъяснить почему так или здесь что то имелося другое ввиду neutral
Спасибо
Отредактировано (Авг. 29, 2008 00:35:20)
Офлайн
Пока единственное что я понял что с помощью этой конструкцией можно создавать только куски запроса sql
а для конструкция типа
objects.extra(
select={
‘entry_count’:тело запроса
где тело запроса это есть подзапрс главного запроса идущего от имя.object ….
То есть я пришел к выводу что с помощь этой конструкции нельзя сделать запрос не содержащий подзапросы то есть просто нельзя набрать запрос и получить кверисет на него
например
SELECT count(*) FROM feedback_reviews,feedback_goods where feedback_reviews.goods_id=feedback_goods.id and feedback_goods.id=3
Прав ли я если нет то где я не прав?
Спасибо
зы
и как я понял эти снипеты (куски кода) для extra(
select={ вставляются только до служебного слова FROM и нет возможности после where?
Отредактировано (Авг. 29, 2008 01:01:29)
Офлайн
romankrvДа.
В документации написано что после этого кода у меня появиться дополнительный атрибут у каждого объекта…
romankrvну написано, что
Кто то может разъяснить почему так или здесь что то имелося другое ввиду neutral
some MySQL versions
romankrvДа. Применительно к select - подзапросы.
Пока единственное что я понял что с помощью этой конструкцией можно создавать только куски запроса sql
romankrvДа. Для обычных запросов есть механизм ORM
То есть я пришел к выводу что с помощь этой конструкции нельзя сделать запрос не содержащий подзапросы то есть просто нельзя набрать запрос и получить кверисет на него
romankrvУ extra есть и другие параметры
вставляются только до служебного слова FROM и нет возможности после where?
Офлайн
Спасибо Daevaorn-у за содержательный ответ
PS
Единственное что я не понял как же использовать ключ
Example:
Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
Отредактировано (Авг. 29, 2008 10:38:33)
Офлайн
romankrvЗначит не так смотришь.
не вижу его в пространстве имен.
Офлайн
slav0nicВот разобрался с методом extra() спасибо Daevaorn. Оказалось что главная проблема была в том что я искал ключ екстра параметра в QuerySet-е
а зачем через extra? метод count() вроде есть же
Офлайн