tags:

views:

87

answers:

2

I had a hard time formulating the title, so please edit it if you have a better one :)

I'm trying to display some statistics using the pygooglechart. And I am using Django to get the database items out of the database.

The database items has a datetime field wich i want to "sort on". What i really want is to populate a list like this.

data = [10, 12, 51, 50]

Where each list item is the number(count) of database items within an hour. So lets say i do a query that gets all items in the last 72 hours, i want to collect the count of each hour into a list item. Anybody have a good way to do this?

A: 

django aggregation

zalew
+1  A: 

Assuming you're running Django 1.1 or a fairly recent checkout, you can use the new aggregation features. Something like:

counts = MyModel.objects.values('datettimefield').annotate(Count('datettimefield'))

This actually gets you a list of dictionaries:

[{'datetimefield':<date1>, 'datettimefield__count':<count1>},
 {'datetimefield':<date2>, 'datettimefield__count':<count2>}, ...]

but it should be fairly easy to write a list comprehension to get the format you want.

Edited after comment: If you're on 1.0.2, the most efficient thing to do is to fall back to raw SQL.

cursor = connection.cursor()
cursor.execute(
     "SELECT COUNT(0) FROM `mymodel_table` "
     "GROUP BY `mydatetimefield`;"
)
counts = cursor.fetchall()
Daniel Roseman
Sadly I am running 1.0.2 on this project, any pointers on the list comprehension? I cant seem to get i working in a proper way.
Espen Christensen