zoukankan      html  css  js  c++  java
  • F与Q查询

    F查询:

      之前构造的过滤器都是将字段值与某个我们设定的常亮做比较,如果我们要对两个字段的字段的值做比较久需要用到F查询;F查询可以用来比较同一个model事例中两个不同字段的值,

    准备工作:

      创建数据库,使用orm创建表,使用Navicat添加数据,也可以使用pycharm中的database功能连接mysql添加数据

    from django.test import TestCase
    
    # Create your tests here.
    import os
    import sys
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test01.settings")
        import django
        django.setup()
        from app01 import models
    
        # 查询卖出数大于50的商品
        # res = models.Product.objects.filter(maichu__gt=50)
        # print(res)
    
        # 查询卖出数大于库存数的商品,F查询
        from django.db.models import F,Q
    
        res=models.Product.objects.filter(maichu__gt=F('kucun'))
        print(res)
    

      

        # 将所有商品的价格提高100块
        res = models.Product.objects.update(price=F('price')+100)
        print(res)
    

      

        #将所有的商品的名字后面都加一个爆款
        from django.db.models.functions import Concat
        from django.db.models import Value
        res=models.Product.objects.update(name=Concat(F('name'),Value('爆款')))
        print(res)
    

      

    Q查询:

      filter() 方法中传入多个值用逗号分开表示的意思的并且的关系,如果需要用到或条件的时候可以用Q查询

      

        #查询卖出数大于300或者价格小于100块的商品
        res=models.Product.objects.filter(Q(maichu__gt=300)|Q(price__lt=100))
        print(res)
    

       Q查询也可以当做并且条件使用:

      

        res =models.Product.objects.filter(Q(name='衣服爆款'),Q(maichu=1001))
        print(res)
    # 名字和卖出条件都满足的数据为空,查询出的结果为空

      

        res =models.Product.objects.filter(Q(name='衣服爆款'),Q(maichu=1000))
        print(res)
    #名字和卖出都满足的的情况下有数据输出

      

       ‘~’:相反意思

        # 价格是100不是衣服爆款的商品
        res =models.Product.objects.filter(Q(price=100.00)|~Q(name='衣服爆款'))
        print(res)
    

      

    事物

      原子性

      一致性

      隔离性

      持久性

      

      开启事务:

      

        #开启事物
        from django.db import transaction
        with transaction.atomic():  #事物要么全部成功,要么全部失败
            # with代码块中写入书屋操作
            models.Product.objects.filter(id=1).update(kucun=F('kucun')-1)
            models.Product.objects.filter(id=1).update(maichu=F('maichu')+1)
        print('操作完成')
    

      

    事物执行成功

    查看sql数据是否被修改了

    在原有的表格字段上添加新的字段

    迁移数据,把新增的字段写入的数据库中

      python3 manage.py makemigrations

      python3 manage.py migrate

    查看数据库中新增字段是否添加上:

     数据库中限制存数据的值

    执行命令:

      python3 manage.py makemigrations

      python3 manage.py migrate

    查看数据库是否创建完成:

      

    查询数据:

    只能查询到数据库中的值,但是查询不到写入的对应的值

    通过get_字段名__display()来获取设置的值

      

  • 相关阅读:
    C# 线程间互相通信
    COM组件的使用方法
    C++基于ATL工程编写ActiveX控件步骤
    VC++编写ActiveX控件
    C#协作试取消线程
    Asp.net的内置对象!!!
    C#的三大特性
    类的静态方法。。。。。
    页面的生命周期
    .net面试题 2016
  • 原文地址:https://www.cnblogs.com/yangzhaon/p/11018938.html
Copyright © 2011-2022 走看看