Найти - Пользователи
Полная версия: sqlalchemy агрегатные функции
Начало » Базы данных » sqlalchemy агрегатные функции
1
hellslade
нужно вот такой запрос реализовать с помощью сессии 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)
при этом ваще все виснет :(
hellslade
оказалось все очень просто. прога зависала потому что считала декартово произведение таблиц (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)
и над этим я парился два дня….аж смешно ))))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB