• Python 【第十四章】django数据操作之F和Q


    model操作 F/Q

    F:

    例子:如查出人名,为该人添加500工资,需要使用F功能

    from django.db.models import F    #导入F
    models.UserInfo.objects.filter().update(salary=F('salary')+500)   #查出该人后,F找出原来工资,再添加 500

    等价与SQL语句: update userinfo set salary=salary+500 

    Q:
    构造搜索条件
    1、传参
    models.UserInfo.objects.filter(id=123,name='alex')

    2、传字典
    d = {'id': 123, 'name':'alex'}
    models.UserInfo.objects.filter(**d)

    <input name='id' />
    <input name='name' />
    获取用户输入,并构造成字典:
    models.UserInfo.objects.filter(**c)
    3、传Q对象
    models.UserInfo.objects.filter(Q对象)

    from django.db.models import Q

    例子:单个条件查询

    views.py

    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    from app01 import models
    from django import forms
    
    def index(request):
        # for i in range(10):
        #     models.UserType.objects.create(caption='CE'+str(i))
        # c = models.UserType.objects.all().count()
        # print(c)
        form = Indexform()
        from django.db.models import Q
        q1 = Q()
        q1.connector = 'OR'
        q1.children.append(('id',1))
        q1.children.append(('id',2))
        q1.children.append(('id',2))
        obj = models.UserType.objects.filter(q1)  #把Q查询条件引入
        for item in obj:
            print(item.id,item.caption)
        return render(request,'index.html',{'form':form})

    浏览器输入:http://127.0.0.1:8000/index/ 后可以过滤出以下结果  

     多条件查询 

     views.py

    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    from app01 import models
    from django import forms
    def index(request):
        # for i in range(10):
        #     models.UserType.objects.create(caption='CE'+str(i))
        # c = models.UserType.objects.all().count()
        # print(c)
        form = Indexform()
        from django.db.models import Q
        # q1 = Q()
        # q1.connector = 'OR'
        # q1.children.append(('id',1))
        # q1.children.append(('id',2))
        # q1.children.append(('id',3))
        # obj = models.UserType.objects.filter(q1)  #把Q查询条件引入
        # for item in obj:
        #     print(item.id,item.caption)
        # return render(request,'index.html',{'form':form})
        con = Q()
        q1 = Q()
        q1.connector = 'OR'
        q1.children.append(('id', 1))
        q1.children.append(('id', 2))
        q1.children.append(('id', 3))
    
        q2 = Q()
        q2.connector = 'OR'
        q2.children.append(('caption', 'CE1'))
        q2.children.append(('caption', 'CE2'))
    
        con.add(q1, 'AND')
        con.add(q2, 'AND')
    
        obj = models.UserType.objects.filter(con)
        for item in obj:
            print(item.id,item.caption)
    
        return render(request, 'index.html', {'form': form})

     浏览器输入:http://127.0.0.1:8000/index/ 后可以过滤出以下结果  

  • 相关阅读:
    远程安装WinXP OEM版系统的痛苦经历
    许可证服务因许可证不够出现占用CPU的故障
    AvayaP133G2和3Com 3300交换机间的Vlan连接
    从win2000升级到win2003后ISA2000缓存的问题
    大型局域网中用ISA隔离部分计算机
    ORACLE学习第二天
    ORACLE ROWID解析
    ORA32773问题解决
    ORACLE学习第三天
    ORACLE表空间迁移
  • 原文地址:https://www.cnblogs.com/yaabb163/p/6354608.html
Copyright © 2020-2023  润新知