先日、別件でDjango ORMのドキュメントをみていると、extra句は将来的にdeprecateされると書いてあった。
これはまずいと思い、extra句を使用している個所を書き換えるべく、とりあえずカラム間比較の方法を調査したので、残しておく。
書き方
F式を利用する
F式
https://docs.djangoproject.com/ja/3.0/topics/db/queries/#filters-can-reference-fields-on-the-model
models.py
from django.db import models
class Sample(models.Model):
sample_number_1 = models.IntegerField()
sample_number_2 = models.IntegerField()
class Meta:
db_table = 'sample'
F式を使って、Sampleテーブルのsample_number_1とsample_number_2を比較してみる。
>>> from sample.models import Sample
>>> from django.db.models import F
>>>
>>> samples = Sample.objects.filter(sample_number_1__gt=F('sample_number_2'))
>>>
>>> # 発行されたSQLを確認
>>> print(samples.query)
SELECT "sample"."id", "sample"."sample_number_1", "sample"."sample_number_2" FROM "sample" WHERE "sample"."sample_number_1" > ("sample"."sample_number_2")
想定通りのSQLが発行されることを確認できた。
参考
extra句の廃止について
https://docs.djangoproject.com/ja/3.0/ref/models/querysets/#extra
F式
https://docs.djangoproject.com/ja/3.0/topics/db/queries/#filters-can-reference-fields-on-the-model
0 件のコメント:
コメントを投稿