如何使用按日期时间字段排序的查询集中的 items.count() 填充列表

发布于 2024-08-01 22:21:26 字数 302 浏览 9 评论 0原文

我很难制定标题,所以如果您有更好的标题,请对其进行编辑:)

我正在尝试使用 pygooglechart 显示一些统计数据。 我正在使用 Django 从数据库中获取数据库项目。

数据库项目有一个我想“排序”的日期时间字段。 我真正想要的是填充这样的列表。

data = [10, 12, 51, 50]

其中每个列表项是一小时内数据库项的数量(计数)。 假设我执行一个查询来获取过去 72 小时内的所有项目,我想将每小时的计数收集到一个列表项中。 有人有好的方法吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寄居人 2024-08-08 22:21:26

假设您运行的是 Django 1.1 或最近的版本,您可以使用新的 聚合特征。 类似于:

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

这实际上为您提供了一个字典列表:

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

但是编写列表理解来获得您想要的格式应该相当容易。

评论后编辑:如果您使用的是 1.0.2,最有效的做法就是回退到原始 SQL。

cursor = connection.cursor()
cursor.execute(
     "SELECT COUNT(0) FROM `mymodel_table` "
     "GROUP BY `mydatetimefield`;"
)
counts = cursor.fetchall()

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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文