Django:Trunc datetime结果为none

时间:2017-05-02 20:08:44

标签: python django sqlite datetime truncate

我有以下型号:

class Statistic(models.Model):
  meter = models.ForeignKey(Meter, on_delete=models.CASCADE, db_index=True)
  timestamp_start = models.DateTimeField(db_index=True)
  timestamp_end = models.DateTimeField(db_index=True)
  usage_start = models.DecimalField(max_digits=10, decimal_places=3)
  usage_end = models.DecimalField(max_digits=10, decimal_places=3)
  return_start = models.DecimalField(max_digits=10, decimal_places=3)
  return_end = models.DecimalField(max_digits=10, decimal_places=3)

我的sqllite数据库中的timestamp_start的第一条记录中有以下值

2016-12-22T06:15:30.420+02:00

当我运行以下查询时:

statistics = Statistic.objects.filter(id=1)
  .annotate(timestamp=Trunc('timestamp_start','day', output_field=DateTimeField()))
  .values('timestamp')
  .annotate(usage_start = Min('usage_start'))

时间戳导致无

  

QuerySet [{' usage_start':十进制(' 136.972'),'时间戳':无}]

当我附加调试器并检查我的统计信息表的第一条记录时,就像这样

Statistics.objects.all()[0].timestamp_start

它返回:

  

datetime.datetime(2016,12,22,6,0)

在面对这个问题之前,我遇到了这个例外:

  

数据库返回了无效的日期时间值。是否安装了数据库和pytz的时区定义?

我确实安装了pytz。但不知道如何解决这个问题。价值不正确吗?无论如何,最后我将settings.py中的use_tz设置为false。 vanisched异常但trunc现在没有返回。这会导致问题吗?

p.s。:我的环境Python 3,Django,Sql lite数据库,windows

1 个答案:

答案 0 :(得分:0)

您可能尚未将时区数据加载到mysql中。 TruncDate使用引擎盖下的➜ myproject git:(master) ✗ pyenv/bin/pip --help Failed checking if argv[0] is an import path entry ValueError: character U+6e657970 is not in range [U+0000; U+10ffff] Fatal Python error: no mem for sys.argv ValueError: character U+6e657970 is not in range [U+0000; U+10ffff] Current thread 0x00007fff767c5000 (most recent call first): [1] 10941 abort pyenv/bin/pip --help 函数,如果没有可用的时区数据,则返回CONVERT_TZ。您可以通过评估以下内容来检查查询使用的SQL:

NULL

可以在此处找到加载时区数据的Windows说明:

我在Linux上遇到了这个问题并按照其他StackOverflow帖子中的说明解决了它: