[Python] sqlite3 e group by

Pietro peter.zamb a gmail.com
Gio 18 Apr 2013 17:27:40 CEST


Ciao,

Mi sto connettendo ad un db sqlite e vorrei fare una query tipo:

sqlite> SELECT count(*),cat,datetime,month,day,hour,min FROM
pollution_gps_pm2_5 GROUP BY year,month,day,hour ORDER BY
year,month,day,hour,min LIMIT 10;
35|35|29/09/2012 11:59|9|29|11|59
59|94|29/09/2012 12:59|9|29|12|59
60|154|29/09/2012 13:59|9|29|13|59
42|196|29/09/2012 14:55|9|29|14|55
10|206|29/09/2012 15:47|9|29|15|47
5|211|04/10/2012 08:59|10|4|8|59
20|231|04/10/2012 09:59|10|4|9|59
27|258|04/10/2012 10:59|10|4|10|59
24|282|04/10/2012 11:59|10|4|11|59
40|322|04/10/2012 12:59|10|4|12|59

utilizzando python:
>>> cur = conn.cursor()
>>> cur.execute("SELECT cat,datetime,month,day,hour,min FROM pollution_gps_pm2_5 GROUP BY year,month,day,hour ORDER BY year,month,day,hour,min;")
<sqlite3.Cursor at 0x38152e30>
>>> results = cur.fetchall()
>>> results[:5]
[(35, u'29/09/2012 11:59', 9, 29, 11, 59),
 (94, u'29/09/2012 12:59', 9, 29, 12, 59),
 (154, u'29/09/2012 13:59', 9, 29, 13, 59),
 (196, u'29/09/2012 14:55', 9, 29, 14, 55),
 (206, u'29/09/2012 15:47', 9, 29, 15, 47)]

Mi restituisce l'ultimacdi ogni singolo gruppo, mentre mi sarei
aspettato una lista di liste(una per ogni anno) contenente una lista
(per ogni mese), contenente una lista (per ogni giorno), contenete un
lista per ogni ora etc.
per capirci qualcosa tipo:

result = [[# anno 2010
                [# Gennaio
                 [# giorno 1, [# ora 1],[# ora 2],[# ora 3], etc.]],
                 [# giorno 2, [# ora 1],[# ora 2],[# ora 3], etc.]],
                 etc.]
                ]
               ]

o un'iteratore o meglio ancora un iteratore che mi restituiva
direttamente ogni lista oraria...

Lo si può fare utilizzando direttamente le funzionalità di sqlite o
devo scrivermi del codice in python per fare questa operazione?
consigli?

Grazie.

Pietro


Maggiori informazioni sulla lista Python