Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2008 08:18:21

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlalchemy агрегатные функции

нужно вот такой запрос реализовать с помощью сессии sqlalchemy

select `appointment`.`user_id`, count(`job`.`done100`) from `appointment`, `job`
where `appointment`.`job_id`=`job`.`id` AND `job`.`done100`=0
group by `appointment`.`user_id`
order by `appointment`.`user_id`
я пишу вот так:
class Job(object):
    pass
class Appointment(object):
    pass
mapping(Job, job_table)
mapping(Appointment, appointment_table)
self.session = getsession()
result = self.session.query(Job, Appointment).group_by(Appointment.c.user_id).select(and_(Job.c.id==Appointment.c.job_id, Job.c.done100==0))
но не могу никак понять, как туды вставить функию count…
пробовал еще вот так
sql = select([Appointment.c.user_id.label('user_id'), func.count(Job.c.done100).label('count')]).group_by(Appointment.c.user_id)
self.session.execute(sql)
при этом ваще все виснет :(



Офлайн

#2 Март 7, 2008 08:19:37

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlalchemy агрегатные функции

оказалось все очень просто. прога зависала потому что считала декартово произведение таблиц (17000 и 48000 строк :))
в этом запросе

sql = select([Appointment.c.user_id.label('user_id'), func.count(Job.c.done100).label('count')]).group_by(Appointment.c.user_id)
не хватало конструкции WHERE
вот так будет правильно:
sql = select([Appointment.c.user_id.label('user_id'), func.count(Job.c.done100).label('count')], and_(Job.c.id==Appointment.c.job_id,Job.c.done100==0)).group_by(Appointment.c.user_id)
и над этим я парился два дня….аж смешно ))))



Отредактировано (Март 7, 2008 08:20:36)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version