Я следующие запросы в некотором питона коде,Объединения нескольких подобных запросов в 1
sel = select([staff.c.name,
staff.c.start_date,
staff.c.leave_allowance,
]) \
.select_from(staff) \
.where(staff.c.name == request.args.get('user')) \
.group_by(staff.c.name, staff.c.leave_allowance, staff.c.start_date)
staff_member = ZS.db_connect().execute(sel).fetchone()
staff_member = dict(staff_member)
sel1 = select([staff.c.start_date,
func.sum(leave.c.hours).label('hours_taken')
]) \
.select_from(join(staff, leave, (staff.c.name == leave.c.name))) \
.where(leave.c.leave_start >= '2016-01-01') \
.where(leave.c.leave_end <= '2016-03-30') \
.where(leave.c.hr_status == 'RP_Approved') \
.where(leave.c.name == request.args.get('user')) \
.group_by(staff.c.name, staff.c.start_date)
jan_user = ZS.db_connect().execute(sel1).fetchone()
if(jan_user):
jan_user = dict(jan_user)
staff_member['JanMarTaken'] = jan_user['hours_taken']
else:
staff_member['JanMarTaken'] = 0
sel2 = select([staff.c.start_date,
func.sum(leave.c.hours).label('hours_taken')
]) \
.select_from(join(staff, leave, (staff.c.name == leave.c.name))) \
.where(leave.c.leave_start >= '2016-04-01') \
.where(leave.c.leave_end <= '2016-09-30') \
.where(leave.c.hr_status == 'RP_Approved') \
.where(leave.c.name == request.args.get('user')) \
.group_by(staff.c.name, staff.c.start_date)
mar_user = ZS.db_connect().execute(sel2).fetchone()
if(mar_user):
mar_user = dict(mar_user)
staff_member['MarSeptHours'] = mar_user['hours_taken']
else:
staff_member['MarSeptHours'] = 0
sel2 = select([staff.c.start_date,
func.sum(leave.c.hours).label('hours_taken')
]) \
.select_from(join(staff, leave, (staff.c.name == leave.c.name))) \
.where(leave.c.leave_start >= '2016-10-01') \
.where(leave.c.leave_end <= '2016-12-31') \
.where(leave.c.hr_status == 'RP_Approved') \
.where(leave.c.name == request.args.get('user')) \
.group_by(staff.c.name, staff.c.start_date)
oct_user = ZS.db_connect().execute(sel2).fetchone()
if(oct_user):
mar_user = dict(mar_user)
staff_member['OctDecHours'] = mar_user['hours_taken']
else:
staff_member['OctDecHours'] = 0
запросов все делает то же самое, в основном, которое поискаШлюпка для пользователя по имени и получить некоторые данные, сохраненных между некоторые даты, мне нужны данные для трех сегментов года, поэтому в настоящее время я запрашиваю базу данных 3 раза с разными параметрами даты, есть ли способ, которым я мог бы сделать это с 1 запросом, для лучшей производительности?