Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 28, 2008 17:27:12

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

QuerySet method EXTRA ошиба или нет?

Здраствуйте.

код который хочу запихнуть в 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'
},
)
и получаю ошибку
“<class ‘_mysql_exceptions.ProgrammingError’>: (1064, ”You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘*) FROM feedback_reviews,feedback_goods where feedback_reviews.goods_id=feedback’ at line 1“)

версия mysql 5+

зы
по ходу вопрос это почему в документации в селекте после ключевого слова FROM прописана одна таблица хотя скрипт делает выборку из двух связанных таблицах. Или джанга сама добирает название недостающие после фром

Спасибо заранее ответившим

Офлайн

#2 Авг. 28, 2008 18:29:52

EXSlim
От:
Зарегистрирован: 2008-06-07
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

QuerySet method EXTRA ошиба или нет?

всё гораздо проще) уберите пробел между именем функции count и скобками



Офлайн

#3 Авг. 28, 2008 18:54:09

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

QuerySet method EXTRA ошиба или нет?

а зачем через extra? метод count() вроде есть же

Офлайн

#4 Авг. 28, 2008 19:06:05

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

QuerySet method EXTRA ошиба или нет?

romankrv
по ходу вопрос это почему в документации в селекте после ключевого слова FROM прописана одна таблица хотя скрипт делает выборку из двух связанных таблицах. Или джанга сама добирает название недостающие после фром
Джанга тут не причем. Просто внешний запрос(по отношению к этому) и так имееn правильный `FROM` c таблицей `goods`



Офлайн

#5 Авг. 28, 2008 23:35:33

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

QuerySet method EXTRA ошиба или нет?

В продолжении темы возник вопрос:

В документации написано что после этого кода у меня появиться дополнительный атрибут у каждого объекта…

цитата:
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)

Офлайн

#6 Авг. 29, 2008 00:47:50

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

QuerySet method EXTRA ошиба или нет?

Пока единственное что я понял что с помощью этой конструкцией можно создавать только куски запроса 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)

Офлайн

#7 Авг. 29, 2008 09:53:32

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

QuerySet method EXTRA ошиба или нет?

romankrv
В документации написано что после этого кода у меня появиться дополнительный атрибут у каждого объекта…
Да.
romankrv
Кто то может разъяснить почему так или здесь что то имелося другое ввиду neutral
ну написано, что
some MySQL versions
romankrv
Пока единственное что я понял что с помощью этой конструкцией можно создавать только куски запроса sql
Да. Применительно к select - подзапросы.
romankrv
То есть я пришел к выводу что с помощь этой конструкции нельзя сделать запрос не содержащий подзапросы то есть просто нельзя набрать запрос и получить кверисет на него
Да. Для обычных запросов есть механизм ORM
romankrv
вставляются только до служебного слова FROM и нет возможности после where?
У extra есть и другие параметры



Офлайн

#8 Авг. 29, 2008 10:31:48

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

QuerySet method EXTRA ошиба или нет?

Спасибо Daevaorn-у за содержательный ответ

PS
Единственное что я не понял как же использовать ключ
Example:

Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
например ‘is_recent’
не вижу его в пространстве имен.

Спасибо

Отредактировано (Авг. 29, 2008 10:38:33)

Офлайн

#9 Авг. 29, 2008 11:50:07

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

QuerySet method EXTRA ошиба или нет?

romankrv
не вижу его в пространстве имен.
Значит не так смотришь.

PS: Кстати, не пренебрегай тегом , а то трудно воспринимать код, который ты пишешь в форуме.



Офлайн

#10 Авг. 30, 2008 17:54:38

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

QuerySet method EXTRA ошиба или нет?

slav0nic
а зачем через extra? метод count() вроде есть же
Вот разобрался с методом extra() спасибо Daevaorn. Оказалось что главная проблема была в том что я искал ключ екстра параметра в QuerySet-е

а вот вопрос к slav0nic как у него получиться на методе count() подсчитать количество записей в двух связанных таблицах M2One например
Спасибо

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version