Django-F对象个Q对象

文章目录

F对象

  • 一个F对象代表数据库中某条记录的字段的信息
  • 作用:
    • 同城用做数据库中的字段值再补货区的情况下进行操作
    • 用于类属性(字段)之间的比较
  • 语法
    from django.db.models import F
    F('列名')
    
  • 场景
    # 例1:我们有个统计点击量的字段,每次更新的操作其实就是把字段的值加1.
    
    # 一般我们的做法是把这条记录取出来,把相应字段加+1,然后在save,类似下面的代码:
    reporter = Reporters.objects.get(name='Tintin')
    reporter.stories_filed += 1
    reporter.save()
    # 这样的话会造成资源竞争,我们取值得操作和改值得操作不是一个SQL语句,同时大量的并发情况下,我们可能多个人取得是一样的值,改完之后也一样,在保存的话会有不少人的加操作没有保存上
    #当我们使用了F()之后呢? 只需要一行代码
    Reporters.objects.filter(name='Tintin').update(stories_filed=F('stories_filed') + 1)
    
    # 不仅代码量少了,而且这是直接在数据中操作一条set语句,效率也变高了,而且SQL语句对set有锁,在并发的情况,减少了多线程同时操作带来的隐患。 但是不支持字符串相加的操作,
    
    #例2: 一个合同有两个日期,一个叫做终止日期,一个叫做结束日期,现在要筛选出终止日期小于结束日期的合同。
    rom django.db.models import F
    from contracts.models import Contracts
    contracts = Contracts.objects.filter(contract_stop_time__lt=F('end_time'))
    

Q对象

  • 作用:在条件中用来实现除(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不成立
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值