我有以下型号:
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
答案 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帖子中的说明解决了它: