日付とdjangoでconnection.cursor()を使用してカスタムSQLを実行することに実際の問題があります。
現在、エンド ユーザーに表示するすべての日付を .astimezone(timezone) で変換していますが、日付を操作するこのカスタム クエリがあります。クエリは次のとおりです。
SELECT date_trunc('day', a.date_done) AS date, sum(b.uploads) FROM celery_taskmeta a
INNER JOIN core_taskextend b
ON a.task_id = b.task_id
WHERE a.status = 'SUCCESS'
AND a.date_done > (now() - interval '7 days')
GROUP BY date
ORDER BY date;
返される日付は +4 時間であり、通常は上記のように変換して正しい日付を取得しますが、データベースを見ると、日付は私のタイムゾーンに対して正しいようです。だから、何が起こっているのか理解できません。上記を ORM で実装する方法がわからなかったため、カスタム クエリを選択しました。
ところで、私のdbクライアントSELECT now();
では、タイムゾーンが正しく設定されています。そしてジャンゴTIME_ZONE = 'US/Eastern'
とUSE_TZ = True
.
次に、次のようにタイムゾーンをクエリに渡そうとしました。
SELECT date_trunc('day', a.date_done AT TIME ZONE 'US/Eastern') AS date, sum(b.uploads) FROM celery_taskmeta a
INNER JOIN core_taskextend b
ON a.task_id = b.task_id
WHERE a.status = 'SUCCESS'
AND date_trunc('day', a.date_done AT TIME ZONE 'US/Eastern') > date_trunc('day', (now() AT TIME ZONE 'US/Eastern') - interval '2 days')
GROUP BY date
ORDER BY date;
私のdbクライアントでsqlコンソールを介して単にクエリを実行する場合と比較して、予期しない結果につながります。後者は正しいように見えます。ジャンゴはタイムゾーンでいつかやっているようです。
誰かが彼女に光を当てることができれば、本当に感謝しています。
ありがとう。