1

日付と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コンソールを介して単にクエリを実行する場合と比較して、予期しない結果につながります。後者は正しいように見えます。ジャンゴはタイムゾーンでいつかやっているようです。

誰かが彼女に光を当てることができれば、本当に感謝しています。

ありがとう。

4

0 に答える 0