2015-04-03 2 views
0

Я использую (отлично) Peewee ORM для моего запроса нуждается в Python, и теперь я хочу, чтобы преобразовать следующий запрос:Как преобразовать этот запрос в Peewee ORM?

select t1.created, t1.property_id, t1.requesting_user_id, t1.type, t1.response 
from pdr t1 
inner join (
    select max(id) as id, property_id, requesting_user_id 
    from pdr 
    where property_id = 7 
    group by requesting_user_id 
) as t2 on t2.id = t1.id 

Так что я придумал следующее:

PDR.select()\ 
    .join(PDR)\ 
    .where(PDR.property == 7)\ 
    .group_by(PDR.requesting_user) 

но это создает следующий sql:

SELECT t1.id, t1.created, t1.property_id, t1.requesting_user_id, t1.type, t1.comment, t1.responding_user_id, t1.property_details_request_id, t1.response 
FROM pdr AS t1 
INNER JOIN pdr AS t1 
ON (t1.property_details_request_id = t1.id) 
WHERE (t1.property_id = 7) 
GROUP BY t1.requesting_user_id 

Я пробовал пару других вариантов, но я как бы застрял.

Кто-нибудь знает, как я могу преобразовать свой запрос в Peewee? Все советы приветствуются!

ответ

1

Попробуйте следующее (непроверенные, но, надеюсь, полезно):

PDRAlias = PDR.alias() 
subq = (PDRAlias 
     .select(fn.MAX(PDRAlias.id).alias('max_id'), PDRAlias.property, PDRAlias.requesting_user) 
     .where(PDRAlias.property == 7) 
     .group_by(PDRAlias.requesting_user) 
     .alias('subq')) 
query = (PDR 
     .select() 
     .join(subq, on=(subq.c.max_id == PDR.id))) 
+0

Спасибо за предложение. Я попробовал, и теперь я получаю сообщение «OperationalError: no такой столбец: subq.id'. Если хочешь, я могу получить пастик всего трассбака. Любая идея, что может быть неправильно сейчас? – kramer65

+0

Вы включили '.alias ('subq')' в конце определения 'subq'? – coleifer

+0

О, подождите, я вижу, я отредактирую ответ очень быстро. – coleifer

Смежные вопросы