DjangoのQuerySetでSQLで言うCOALESCE(null判定してなければ他の値)をしたいとき
今回はPythonのDjangoのQuerySetでSQLで言うCOALESCE(null判定してなければ他の値)をしたいときどうすれば良いのかについてお伝えしていきます。
DjangoのQuerySetでSQLで言うCOALESCE(null判定してなければ他の値)をしたいとき
結論から言うとCoalesce関数をimportしてそのまま指定してあげましょう。
細かい仕様については公式ドキュメントの方が分かりやすいかもしれません。
https://docs.djangoproject.com/en/4.2/ref/models/database-functions/#django.db.models.functions.Coalesce
ここでは発展系の例だけ挙げようと思います。
下記の例では、TestTimeモデルについて、dateオブジェクトからの経過の秒数をannotateで取得する例です。start_2があればstart_2からdateの間の時間を取得し、start_2がなければstart_1からdateの間の時間を取得します。
1 2 3 4 |
from django.db.models import F, ExpressionWrapper from django.db.models.functions import Coalesce result = TestTime.objects.annotate(start=ExpressionWrapper(Coalesce(F('start_2'), F('start_1'))-F('date'), output_field=DurationField()) |
個人的には意外と使う気がするので覚えておきたいですね。
終わりに
今回はPythonのDjangoのQuerySetでSQLで言うCOALESCE(null判定してなければ他の値)をしたいときどうすれば良いのかについてお伝えしていたしました。
ディスカッション
コメント一覧
まだ、コメントがありません