Django-F和Q函数作用与使用
F函数
能够解析对现有查询对象的引用的对象。
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会使用SQL语句的方式取代标准的Python操作。
上述代码中不管 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')
作者:枪林弹雨丶
若标题中有【转载】字样,则本文版权归原作者所有。若无转载字样,
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
请注意:作者五行缺钱,如果喜欢这篇文章,请随意打赏!