は、このモデルの小さなDjangoアプリケーションを作成することができます:我々場合TruncDayジャンゴ+ MySQL5.5で働いていない
Thing.objects.create()
print Thing.objects.annotate(
truncstamp=TruncDay('timestamp')
).values('truncstamp')
:
class Thing(models.Model):
timestamp = models.DateTimeField(auto_now_add=True)
は今、この日の短縮バージョンを取得しようとすることができますちょうどジャンゴでのクエリセットを実行して、私たちは何かを説明するかもしれないエラーを取得:
ValueError: Database returned an invalid datetime value. Are time zone definitions for your database and pytz installed?
をしかし、私はpytzがインストールされている、と私は時間ZONをロードしました私のデータベース内のes。私が意味する、このクエリは動作します。私はこのクエリを実行しようと
SELECT CAST(DATE_FORMAT(CONVERT_TZ(`stuff_thing`.`timestamp`, 'UTC', UTC), '%Y-%m-%d 00:00:00') AS DATETIME) AS `truncstamp` FROM `stuff_thing`
:これは、クエリを生成する
print Thing.objects.annotate(
truncstamp=TruncDay('timestamp')
).values('truncstamp').query
:
SELECT CONVERT_TZ(NOW(), 'SYSTEM', 'UTC');
はそれを実行しようとしている問い合わせるかを見ることができますMySQLは動作しません。ここで
ERROR 1054 (42S22): Unknown column 'UTC' in 'field list'
はまだ同じ、同じエラーを与えるクエリの最小サブセットです:私たちはここ
SELECT CONVERT_TZ(timestamp, 'UTC', UTC) from stuff_thing;
何をしているのか? UTCからUTCへの変換? 2番目のUTCが引用されないのはなぜですか? Djangoは無効なSQLを発行していますか? 2番目の 'UTC'を引用しても、変換から得られるものはすべてNULLです。 UTCからUTCに変換しようとしているのはなぜですか?そのステップをスキップできませんか?
これはデフォルト設定の新しく生成されたアプリです。
# TIME_ZONE = 'UTC'
さて結果はアメリカ/シカゴタイムゾーンに戻ってくる:私は、このデフォルト設定をコメントアウトした場合、クエリが実行されることに気づきました。