Hello list,
I am refactoring some RAW SQL to use SQL Alchemy ORM Query object
(session.query).
What I have so far is a SQL to reproduce using SQL Alchemy:
My SQL is this:
1. SELECT DATE_FORMAT(DATE, '%Y%m%d') AS `date`,
2. `Hour` AS `hour`,
3. `Minute` AS `minute`, (MAX(TotalMBs)*8/5/60) AS total_mbs,
4. (MAX(TotalMissMBs)*8/5/60) AS total_mbs_miss
5. FROM (SELECT `Date`, `Hour`, `Minute`, SUM(TotalMBs) AS TotalMBs,
6. SUM(TotalMissMBs) AS TotalMissMBs, `ClientID`, `Type`
7. FROM reports.ClientsGlobalCounters
8. WHERE DATE >= :date_from AND DATE <= :date_to
9. <IN() expression here>
10. AND `Type` LIKE :service
11. GROUP BY `Date`, `Hour`, `Minute`, `ClientID`, `Type`)
12. AS t1 GROUP BY <GROUP_BY here> ORDER BY `Date`
And my Python code is this:
1. def select_total_mbps(self, date_from, date_to, service, clients=
None):
2. sub_qs = reports_session.query(
3. (func.max(ClientGlobalCounter) *
4. 8 / 5 / 60).label('total_miss_mbs'),
5. ClientGlobalCounter.client_id,
6. ClientGlobalCounter.type,
7. ClientGlobalCounter.date,
8. ClientGlobalCounter.hour,
9. ClientGlobalCounter.minute,
10. func.sum(ClientGlobalCounter.total_mbs).label('total_mbs'
),
11. func.sum(ClientGlobalCounter.total_miss_mbs).label(
12. 'total_miss_mbs')) \
13. .filter(ClientGlobalCounter.date.between(date_from,
date_to))
14. if clients:
15. sub_qs = sub_qs.filter(ClientGlobalCounter.client_id.in_(
clients))
16. sub_qs = sub_qs.filter(ClientGlobalCounter.type.like(service)
) \
17. .group_by(ClientGlobalCounter.date,
18. ClientGlobalCounter.hour,
19. ClientGlobalCounter.minute,
20. ClientGlobalCounter.client_id,
21. ClientGlobalCounter.type)
22.
23. qs = reports_session.query(
24. ClientGlobalCounter.client_id,
25. ClientGlobalCounter.type,
26. func.date_format(ClientGlobalCounter.date, 'Ymd'),
27. ClientGlobalCounter.hour,
28. ClientGlobalCounter.minute,
29. (func.max(ClientGlobalCounter.total_mbs) * 8 / 5 / 60).
label('total_mbs'),
30. sub_qs)
31. qs = qs.group_by(
32. *ClientGlobalCounterAPI.date_group(ClientGlobalCounter,
33. date_from,
34. date_to))
35.
36. return [d.__dict__ for d in qs.all()]
I am not understanding the docs because they only talk about a subselect
inside the WHERE. What I am doing here is retrieving a MAX(field) from a
SELECT.
There is a related problem
here: https://groups.google.com/forum/#!topic/sqlalchemy/LBEyRe3w-8Q
Can someone guide me to the right direction? Thanks!
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.