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
クエリが実際に実行されると(「ティック」の反復時に)例外が発生するよう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 のバグなのかはわかりません。
テーブル「charts_solarentryhour」の「時間」フィールドは次のように定義され
time = models.DateTimeField()
ています。strftime('%Y-%m-%d %H', 'now')
次にDjangoがクエリを実行すると、データベースから返された文字列に分と秒がないため、クエリ結果の解析時に失敗します(リストインデックスが範囲外の例外がスローされる理由です)
日時フィールド全体を入力しないのは悪い習慣ですか?
Django はいくつかのゼロを追加できませんか?
生のクエリ実行に戻らずにこれを修正する良い方法はありますか?