【问题标题】:Django group by date with strftime in PostgreSQLDjango 按日期在 PostgreSQL 中使用 strftime 分组
【发布时间】:2016-03-08 04:41:51
【问题描述】:
dic = {
    'year': 'strftime("%%Y", created_time)',
    'month': 'strftime("%%Y-%%m", created_time)',
    'day': 'strftime("%%Y-%%m-%%d", created_time)',
    'hour': 'strftime("%%Y-%%m-%%d-%%H", created_time)',
    'hour_total': 'strftime("%%H", created_time)',
}

all_posts = all_posts.extra({'date': dic[method]}).order_by().values('date') \
        .annotate(p_count=Count('created_time'))

我想按日期分组,所以我在 sqlite3 中使用了该来源。 我将数据库更改为 PostgreSQL,然后该代码不起作用。 我该如何处理这个来源?

我需要对年、月、日、小时(某个日期以小时为单位)和小时(按时间统计的总日期小时)进行分组。

列“%Y-%m”不存在 第 1 行: SELECT MAX("p_count") FROM (SELECT (strftime("%Y-%m", area

这是我的错误,我的 django 版本是 1.8.5。

【问题讨论】:

  • “不起作用”意味着什么?错误?结果无效?什么版本的 django?
  • @Sayse,编辑我的问题!我使用 django 1.8.5 并且“列“%Y-%m”不存在”是错误的

标签: django postgresql group-by


【解决方案1】:

首先,你得到这个错误是因为你使用双引号而不是单引号(我的意思是你需要写'%%H',而不是"%%H")。但在那之后你肯定会得到另一个错误:

函数strftime(未知,带时区的时间戳)不存在

所以如果你想修复它,你可以使用date_trunc函数而不是strftime。

更新:

从 Django 1.10 开始,您可以将 Trunc 类与 annotate 一起使用,而不是 extra(此方法被标记为已弃用),并且它不依赖于您使用的数据库。

【讨论】:

  • 我在使用 Django==1.5.5 和 MySQL 时遇到了同样的错误(函数 strftime 不存在)。有什么办法可以在 MySQL 中处理这个问题?
  • Sid,请看这里的答案:stackoverflow.com/questions/24361074/…
  • 感谢您的链接,我不知道 sqlite 和 mysql 对于这些功能的行为不同。尽管即使在这样做之后,我也收到了我在链接问题评论中提到的错误。你能看看吗?
  • Sid,请创建一个新问题,以便您能够更详细地描述您的问题。
猜你喜欢
  • 2023-03-18
  • 2021-11-24
  • 2023-03-10
  • 1970-01-01
  • 2018-10-12
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多