1
我有這個問題,prostgresql和Django的:Django的Postgres的:如何分組按日期時區時間字段啓用
我在某個時間有很多在某一日期創建的事件,這存儲在日期時間字段created
中。
- 我想根據
created
字段的日期部分進行彙總。最簡單的例子是:how many event are in each day of this month?
。 created
字段是可識別時區的。因此,結果應根據用戶所處的時區而變化。例如,如果您在2017年10月2日23:30 UTC時間創建了2個事件(如果您從UTC-1查看它們),則應在10月3日00:30,總數應該增加到第三。
我很努力地找到解決這個問題的方法,可以處理大量數據。所以對於每一天和SQL語句這樣做不是一種選擇。我想要的東西,轉化爲:
SELECT count(*) from table GROUP BY date
現在我發現這個問題的第一部分的解決方案:
from django.db import connection
truncate_date = connection.ops.date_trunc_sql('day', 'created')
queryset = queryset.extra({'day': truncate_date})
total_list = list(queryset.values('day').annotate(amount=Count('id')).order_by('day'))
有沒有辦法添加到這個應該由使用的時區date_trunc_sql函數來計算一天?或者在date_trunc_sql之前的其他函數,然後鏈接那一個。
謝謝!
謝謝。鏈接很有用,我發現了一種使用'date_trunc_sql'解決我的問題的方法。此外,這個評論幫助。 https://stackoverflow.com/questions/25385370/django-orm-with-date-trunk-function-and-timezones – Vlad
我看到有一個connection.ops.datetime_trunc_sql函數需要時區作爲參數,但我不能那工作。有什麼想法如何做到這一點?它後來關閉連接,在'queryset = queryset.extra({'day':truncate_date}')這行''''' – Vlad
AFAIK這個特定的行不應該調用SQL查詢。但我可能是錯的。我想嘗試的一件事是將其包裝在交易中。 https://docs.djangoproject.com/en/1.11/topics/db/transactions/#django.db.transaction.atomic –