F对象和Q对象
F对象
一个F对象代表数据库中某条记录的字段的信息
作用:
通常是对数据库中的字段值在不获取的情况下进行操作
用于类属性(字段)之间的比较
语法
from django.db.models import F
F('列名')
解决一种极端事件的产生,比如用户对一条微博的点赞,假如他们同时同时点赞,点赞数的可能只增加一个,但是用F对象就会使用MySQL中的一种锁使更新语句一次只能一个用户运行
old - >update topic set like = 1 where id = xxxx
F - > update topic set like = like + 1 where id = xxxx
Q对象
当在获取查询结果集 使用复杂的逻辑或、逻辑非~等操作时可以借助于 Q对象进行操作
如: 想找出定价低于20元 或 清华大学出版社的全部书,可以写成
Book.objects.filter(Q(price__lt=20) | Q(pub="清华大学出版社"))
Q对象在 数据包 django.db.models 中。需要先导入再使用
作用:在条件中用来实现除 and(&)以外的 or()或 not(~)操作
运算符:
& 与操作
| 或操作
~ 非操作
语法:
from django.db.models import Q
Q(条件1)|Q(条件2) # 条件1成立或条件2成立
Q(条件1)&Q(条件2) # 条件1和条件2同时成立
Q(条件1)&~Q(条件2) # 条件1成立且条件2不成立