酱狗的杂七杂八(肆)

F()方法 & Q()方法
# F()
"""
    1. 可取出同一models下某一字段的值
    2. 可批量对某一字段的值进行操作
    
    # 查询卖出书大于50的商品
    result = models.Product.objects.filter(sale__gt=50)
    print(result)
    
    # 查询卖出数大于库存数的商品
    result = models.Product.objects.filter(sale__gt=F(repertory))
    print(result)
    
    # 将所有商品的价格都提高 100 元
    result = models.Product.objects.filter(price=F('price')+100)
    print(result)
    
    # 将所有商品的名字后加上”爆款“二字
    from django.db.models.functions import Concat
    from django.db.models improt Value
    result = models.Product.objects.update(name=Concat('name), Value('爆款'))
    print(result)
"""
# Q()
"""
    1. 和 F() 方法用法类似
    2. 增加逻辑
    
    # Q()的 and 查询   ,
    result = models.Product.objects.filter(Q(price=188.88),Q(name="连衣裙爆款"))
    print(result)
    
    # Q()的 or 查询    |
    result = models.Product.objects.filter(Q(price=188.88)|Q(name="连衣裙爆款"))
    print(result)
    
    # Q()的 not 查询   ~
    result = models.Product.objects.filter(Q(price=188.88)|~Q(name="连衣裙爆款"))
    print(result)
    
    # 混合使用  Q()必须放在普通的过滤条件前面
    result = models.Product.objects.filter(~Q(name='连衣裙爆款'),price=188.88)
    print(result)
    
    # 更改默认逻辑关系
    from django.db.models import F, Q
    q = Q()
    q.connector = 'or'  
    
    # 通过实例对象添加条件
    from django.db.models import F, Q
    q = Q()
    q.children.append(('price',188.88))
    q.children.append(('name','高跟鞋爆款'))
    result = models.Product.objects.filter(q)
    print(result)
"""
事物
# 事物的 ACID
"原子性 | 一致性 | 隔离性 | 持久性“

from django.db import transaction
from django.db.models import F
with transaction.atomic():
    # 在with中写事物操作
    models.Product.objects.filter(pk=1).update(store=F('store')-1)
    models.Product.objects.filter(pk=1).update(sale=F('sale')+1)
only & defer
# 使用 .value取值
"""
name = models.Product.objects.values('name') #列表套字典
print(name) # <QuerySet [{'name': '高跟鞋爆款'}, {'name': '连衣裙爆款'}, {'name': '帽子爆款'}]>
"""
# 使用 .only取值
"""
name = models.Product.objects.only('name')
print(name) # 仅返回该字段的数据对象   
"""
# 使用 .defer取值
"""
name = models.Product.objects.defer('name')
print(name) # 返回非该字段的数据对象
"""

转载于:https://www.cnblogs.com/Ethan99/p/11018942.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值