0
讓我們創建一個小的Django應用程序使用此模型:TruncDay不Django的工作+ MySQL5.5
class Thing(models.Model):
timestamp = models.DateTimeField(auto_now_add=True)
現在讓我們試圖讓這個日期的刪減版本:
Thing.objects.create()
print Thing.objects.annotate(
truncstamp=TruncDay('timestamp')
).values('truncstamp')
如果我們只要運行在Django的查詢集,我們得到這或許可以解釋一些錯誤:
ValueError: Database returned an invalid datetime value. Are time zone definitions for your database and pytz installed?
但我已經安裝了pytz,我已經加載的時間ZON es在我的數據庫中。我的意思是,這個查詢的工作:
SELECT CONVERT_TZ(NOW(), 'SYSTEM', 'UTC');
讓我們看看會查詢它試圖運行:
print Thing.objects.annotate(
truncstamp=TruncDay('timestamp')
).values('truncstamp').query
這產生了查詢:
SELECT CAST(DATE_FORMAT(CONVERT_TZ(`stuff_thing`.`timestamp`, 'UTC', UTC), '%Y-%m-%d 00:00:00') AS DATETIME) AS `truncstamp` FROM `stuff_thing`
如果我嘗試運行此查詢MySQL不起作用。
ERROR 1054 (42S22): Unknown column 'UTC' in 'field list'
這裏是查詢的最小子集仍然給出了同樣的同樣的錯誤:
SELECT CONVERT_TZ(timestamp, 'UTC', UTC) from stuff_thing;
什麼是我們在這裏幹什麼?從UTC轉換到UTC?爲什麼沒有引用第二個UTC? Django散發無效的SQL?即使你引用第二個「UTC」,你從轉換中得到的所有值都是NULL。爲什麼它甚至試圖從UTC轉換爲UTC?我們不能跳過這一步嗎?
這是一個使用默認設置的新生成的應用程序。我注意到,如果我註釋掉這個默認設置,查詢將運行:
# TIME_ZONE = 'UTC'
現在結果回來與美洲/芝加哥時區。