我想從使用Django的sqlite數據庫中查詢數據。使用Django ORM過濾日期時間範圍時出現奇怪的行爲
模型
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()
這個表由一個數據庫觸發器,不輸入完整的日期時間到該字段填入,索利strftime('%Y-%m-%d %H', 'now')
當Django然後執行查詢,它在解析查詢結果時失敗,因爲從數據庫返回的字符串中沒有分秒數(這就是爲什麼列表索引超出範圍異常被拋出的原因)
是不是很差練習不填充整個日期時間字段?
不應該Django能夠添加一些零?
有沒有什麼好方法可以解決這個問題,而不會退回原始查詢執行?
您可以顯示* how *你正在迭代滴答? – jknupp
你是什麼意思,似乎會發生?你有回溯。什麼是97號線? –
第97行的代碼還沒有被我寫過,並且是django特有的。 執行操作時出現錯誤: '對於滴答滴答:'' – Simbi