我正在尝试使用 Django 从 sqlite 数据库中查询数据。
该模型
class SolarEntryHour(models.Model):
time = models.DateTimeField()
device = models.ForeignKey(Device)
lW = models.DecimalField(max_digits=9, decimal_places=3)
class Meta:
unique_together = (("time", "device"))
我如何尝试访问数据
start = datetime.datetime.utcnow()+relativedelta(hour=0, minute=0, second=0, microsecond=0)
end = datetime.datetime.utcnow()
ticks = SolarEntryHour.objects.filter(
time__range=(start, end),
device = str(deviceID)
)
发生了什么
Exception Value:
list index out of range
Exception Location: /usr/lib/python2.7/dist-packages/django/db/backends/util.py in typecast_timestamp, line 97
异常似乎发生了,当查询实际执行时(在迭代“滴答声”时)Django尝试执行查询,并且输出print start; print end
看起来很好
2013-01-01 00:00:00 - 2013-01-01 20:47:24.245942
SELECT "charts_solarentryhour"."id", "charts_solarentryhour"."time", "charts_solarentryhour"."device_id", "charts_solarentryhour"."lW"
FROM "charts_solarentryhour"
WHERE ("charts_solarentryhour"."device_id" = 1 AND "charts_solarentryhour"."time"
BETWEEN 2013-01-01 00:00:00 and 2013-01-01 20:47:24.245942)
编辑:
我想我找到了问题,但我不知道这是预期的行为还是 Django Bug。
表“charts_solarentryhour”的“时间”字段定义为:
time = models.DateTimeField()
该表由数据库触发器填充,没有向该字段输入完整的日期时间,soleystrftime('%Y-%m-%d %H', 'now')
当 Django 然后执行查询时,在解析查询结果时失败,因为从数据库返回的字符串中没有分钟和秒(这就是抛出列表索引超出范围异常的原因)
不填充整个日期时间字段是一种不好的做法吗?
Django不应该能够添加一些零吗?
有没有什么好的方法可以解决这个问题而不会退回到原始查询执行?