2016-11-15 9 views
0

は、このモデルの小さな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' 

さて結果はアメリカ/シカゴタイムゾーンに戻ってくる:私は、このデフォルト設定をコメントアウトした場合、クエリが実行されることに気づきました。

答えて

0

ああ。素晴らしい。私はMySQLキャッシュのクエリを推測し、キャッシュは大文字と小文字を区別します。この狂気を見てください:

mysql> SELECT CAST(DATE_FORMAT(CONVERT_TZ(`stuff_thing`.`timestamp`, 'UTC', 'UTC'), '%Y-%m-%d 00:00:00') AS DATETIME) AS `truncstamp` FROM `stuff_thing` LIMIT 21; 
+------------+ 
| truncstamp | 
+------------+ 
| NULL  | 
| NULL  | 
+------------+ 
2 rows in set (0.00 sec) 

mysql> SELECT CAST(DATE_FORMAT(CONVERT_TZ(`stuff_thing`.`timestamp`, 'UTC', 'UTC'), '%Y-%m-%d 00:00:00') AS DATETIME) as `truncstamp` FROM `stuff_thing` LIMIT 21; 
+---------------------+ 
| truncstamp   | 
+---------------------+ 
| 2016-11-15 00:00:00 | 
| 2016-11-15 00:00:00 | 
+---------------------+ 
2 rows in set (0.00 sec) 

私はmysqlを再起動し、両方のクエリが機能するようになりました。私はそれを再起動せずにタイムゾーンをインポートしてから壊れていたと思います。

関連する問題