Django-FとQ関数の役割と使用
3048 ワード
F関数
既存のクエリー・オブジェクトへの参照を解析できるオブジェクト.
実行されたSQL文
私たちが生成したいSQL文は
この場合F関数を使用する必要があります
DjangoプログラムにF()が表示されると、Djangoは標準のPython操作の代わりにSQL文を使用します.
上記コードにおいて
上記の方法でデータを更新した後、データベースの値がプログラムの値に対応するようにデータを再ロードする必要があることに注意してください.
あるいは、より簡単な方法を使用します.
Q関数
役割:オブジェクトを複雑にクエリーし、&(and)、|(or)、~(not)オペレータをサポートします.
基本的な使用方法:
クエリがキーワードクエリを使用している場合、Qオブジェクトは必ず前面に表示されます.
既存のクエリー・オブジェクトへの参照を解析できるオブジェクト.
obj = Score.objects.get(stuid='12')
obj.score += 1
obj.order.save()
実行されたSQL文
update score set score = 60 where stuid = '12'
私たちが生成したいSQL文は
update score set score = score + 1 where stuid = '12'
この場合F関数を使用する必要があります
from django.db.models import F
from core.models import Order
obj = Score.objects.get(stuId='12')
obj.score = F('score') + 1
obj.save()
# sql :
update score set score = score + 1 where stuid = '12'
DjangoプログラムにF()が表示されると、Djangoは標準のPython操作の代わりにSQL文を使用します.
上記コードにおいて
Score.score
の値は何ですか.Pythonはその値を取得したことがありません.pythonがした唯一のことはDjangoのF()関数でSQL文を作成して実行することです.上記の方法でデータを更新した後、データベースの値がプログラムの値に対応するようにデータを再ロードする必要があることに注意してください.
score_obj= Score.objects.get(StuId=keyword)
あるいは、より簡単な方法を使用します.
Score.refresh_from_db()
Q関数
役割:オブジェクトを複雑にクエリーし、&(and)、|(or)、~(not)オペレータをサポートします.
基本的な使用方法:
from django.db.models import Q
score_obj=Score.objects.filter(Q(StuId=keyword)|Q(StuId=keyword))
クエリがキーワードクエリを使用している場合、Qオブジェクトは必ず前面に表示されます.
Student.objects.get(
Q(StuDate=date(2008, 5, 12)) | Q(StuDate=date(2018, 5, 6)),
StuName__startswith='Who')