zoukankan      html  css  js  c++  java
  • Python菜鸟之路:Django 数据库操作进阶F和Q操作

    Model中的F

      F 的操作通常的应用场景在于:公司对于每个员工,都涨500的工资。这个时候F就可以作为查询条件

    from django.db.models import F
    models.UserInfo.objects.filter().update(salary=F('salary')+500)
    # F('salary')就表示salary在这行记录中的值。

      F的使用场景基本就是这样,比较简单。

    Model中的Q

      Q 的操作通常的应用场景在于:构造搜索条件。

      普通filter搜索条件支持三种传参方式:1. 传具体参数  2.传字典  3.传Q对象。具体例子如下

    1. 传具体参数

    models.UserInfo.objects.filter(id=3,name='Bob')

    2. 传字典

    dic = {'id':3,'name':'Bob'}
    models.UserInfo.objects.filter(**dic)

    3. 传Q对象--通常会用在进行构造组合搜索

    步骤显示:

    类型一: 构建简单搜索条件
    # 1. 导入Q模块
    from django.db.models import Q
    # 2. 传入条件进行查询
    q1 = Q()          # 创建Q对象实例
    q1.connector = 'OR'                      # 多个条件之间以or形式连接
    q1.children.append(('id', 1))   
    q1.children.append(('id', 2))
    q1.children.append(('id', 3))
        
    models.Tb1.objects.filter(q1)   # 传入简单的Q对象进行查询,每个查询条件之间以or连接
    #--------------------------------------------------------------------------------#
    类型二:构建复杂搜索条件
    # 1. 导入Q模块
    from django.db.models import Q
    # 2. 创建Q对象实例
    con = Q()
    # 3. 创建条件q1
    q1 = Q()
    q1.connector = 'OR'
    q1.children.append(('id', 1))  # 这三个条件以or的形式连接
    q1.children.append(('id', 2))
    q1.children.append(('id', 3))
    
    # 4. 创建条件q2
    q2 = Q()
    q2.connector = 'OR'
    q2.children.append(('status', '在线'))
    # 5. 指定不同搜索条件之间以and还是or来连接
    con.add(q1, 'AND') 
    con.add(q2, 'AND')        # 表示q1与q2之间通过and来连接
    
    models.Tb1.objects.filter(con) #传入复杂Q对象进行搜索
    
  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/jishuweiwang/p/6062704.html
Copyright © 2011-2022 走看看