1

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 はいくつかのゼロを追加できませんか?
生のクエリ実行に戻らずにこれを修正する良い方法はありますか?

4

2 に答える 2

0

Q: 日時フィールド全体を入力しないのは悪い習慣ですか?

はい - 整形式の標準日付形式を喜んで解析するツールがたくさんあります。したがって、独自のフォーマットを発明するときは、悪いことが起こることを予期してください。Django と事実上すべてのフレームワークは、標準のフィールド型で確立された規則を使用することを期待しています。

Q: Django はいくつかのゼロを追加できませんか?

いいえ、これは闇の魔法です。「2013-01-10 10」には従来の意味はありません。

Q: 生のクエリ実行に戻らずにこれを修正する良い方法はありますか?

はい - ここで答えを参照してください: DateTimeField の形式

于 2013-10-11T06:04:14.837 に答える