• 酱狗的杂七杂八(肆)


    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)	# 返回非该字段的数据对象
    """
    
  • 相关阅读:
    Log4net中的RollingFileAppender解析
    TortoiseSVN使用简介
    ALinq 入门学习(四)查询关键字
    ALinq 入门学习(五)删除修改数据
    ALinq 入门学习(五)插入数据
    C# 委托知识总结
    sql 分页
    C# 数据结构常用术语总结
    ALinq 入门学习(三)Where 条件查询
    ALinq 入门学习(六)Join 连接查询
  • 原文地址:https://www.cnblogs.com/Ethan99/p/11018942.html
Copyright © 2020-2023  润新知