0
点赞
收藏
分享

微信扫一扫

Django学习 Day9


1.F对象

一个F对象代表数据库中某条记录的字段的信息。
作用:
通常是对数据库中的字段的值在不获取的情况下进行操作
用于类属性(字段)之间的比较。
语法:

From django.db.models import F
F(‘列名’)

例子:
所有Book数据表中的price涨价1元或降价一元。

Book.objects.all().update(price=F(‘price’)+1)
Book.objects.all().update(price=F(‘price’)-1)

F对象能够很好的解决并发情况下对数据加锁的问题。
例如对于账户余额的修改问题。

单线操作的情况下,

User = User.objects.get(id=1)
User.balance = User.balance + 100
User.save()

但是如果用户id=1在多个银行同时存款时,会导致在get时他们的数据在分布式环境中是相同的,这就导致我们需要把这个余额变化的代码看成是一个整体。就需要F对象的帮助。也就是

User = User.objects.get(id=1)
User.balance = F(‘Balance’) + 100
User.save()

通过F对象的帮助,我们能够较好的解决并发情况下的冲突问题。

或者,利用F对象,可以查找在Book表中,price大于id的情况。

Django学习 Day9_User

2.Q对象

由于filter方法只能实现and的逻辑运算
当在获取查询结果集使用逻辑或|或者是逻辑非~等操作时,可以使用Q对象进行操作。

例如,找出所有定价高于20元或id大于3的书,可以写成:

Book.objects.filter(Q(price__gt=20) | Q(id__gt=3))

Django学习 Day9_字段_02


除了或操作符 | ,还有& 与操作符、~非操作符。


举报

相关推荐

0 条评论