Python Django:Trunc datetime结果为无

Python Django:Trunc datetime结果为无,python,django,sqlite,datetime,truncate,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.De

我有以下型号:

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'),'timestamp':None}]

当我附加调试器并检查统计表的第一个记录时,如下所示

Statistics.objects.all()[0].timestamp_start
它返回:

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

在面临此问题之前,我遇到了以下异常:

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

我确实安装了pytz。但我不知道如何解决这个问题。值是否不正确?无论如何,最后我将settings.py中的use_tz设置为false。异常vanisched,但trunc现在不返回任何异常。这是造成问题的原因吗


p、 美国:我的环境Python 3、Django、Sql lite数据库、windows

您可能还没有将时区数据加载到mysql中。TruncDate在引擎盖下使用
CONVERT_TZ
功能,如果没有可用的时区数据,该功能将返回
NULL
。您可以通过评估以下内容来检查查询使用的SQL:

str(statistics.query)
有关加载时区数据的Windows说明可在此处找到:

  • (确保向下滚动有关Windows的部分)
我在Linux上遇到了这个问题,并在另一篇StackOverflow文章中指出解决了这个问题:


我忘了这个问题。但你是对的。最后我翻阅了django的源代码。在那里,我发现它确实需要一个时区才能正常工作。但是谢谢你的回答,希望它能帮助别人。