zoukankan      html  css  js  c++  java
  • Django开发之路 二(django的models表查询)

    django的models表查询

      一、单表查询

    (1) all():                 查询所有结果    # 返回的QuerySet类型
     
    (2) filter(**kwargs):      它包含了与所给筛选条件相匹配的对象   #返回的QuerySet类型
     
    (3) get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,  #返回的models对象
                                 如果符合筛选条件的对象超过一个或者没有都会抛出错误。
     
    (4) exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象  #返回的QuerySet类型 
     
    (5) values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列  #返回的QuerySet类型 
                               model的实例化对象,而是一个可迭代的字典序列
     
    (6) values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列  #返回的QuerySet类型 
     
    (7) order_by(*field):      对查询结果排序  
     
    (8) reverse():             对查询结果反向排序
     
    (9) distinct():            从返回结果中剔除重复纪录
     
    (10) count():              返回数据库中匹配查询(QuerySet)的对象数量。
     
    (11) first():              返回第一条记录  #返回的models对象
    (12) last(): 返回最后一条记录  #返回的models对象
    (13) exists(): 如果QuerySet包含数据,就返回True,否则返回False

      二、双下划线查询

    (1)models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
     
    (2)models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
    (3)models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
       
    (4)models.Tb1.objects.filter(name__contains="ven") #字段包含指定值的
    (5)models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感  

    (6)models.Tb1.objects.filter(id__range
    =[1, 2])    # 范围bettwen and

    (7)还有startswith,istartswith, endswith, iendswith之类

      三、跨表查询

      1、表结构

    class Something(models.Model):
        name = models.CharField(max_length=32)
    
    
    class UserType(models.Model):
        caption = models.CharField(max_length=32)
        s = models.ForeignKey('Something',on_delete=models.CASCADE)

    class UserInfo(models.Model):
      user
    = models.CharField(max_length=32)
      pwd
    = models.CharField(max_length=32)
      user_type
    = models.ForeignKey('UserType') # user_type_id

      2、查询

    userinfo_obj = UserInfo.objects.all()

      查询到的是里面包含多个UserInfo对象,取第一个UserInfo对象则

    userinfo_obj[0]
    

      取第一个对象的值则为

    id = userinfo_obj[0].user.id
    user = userinfo_obj[0].user.user
    pwd = userinfo_obj[0].user.pwd

      3、一对多操作

      创建数据一步到位

    UserInfo.objects.create(user='abj','pwd'='111',user_type_id=3)

      4、反向查询

      反向查询其他表的数据双下划线__很重要!如查询‘普通用户’用user_type__caption即可

    q = UserInfo.objcets.filter(user_type__caption='普通用户')
  • 相关阅读:
    mysql的配置和安装
    ubuntu开机后无法进入桌面
    python的学习笔记(1)之json序列化的使用(2)
    python的学习笔记(1)之json序列化的使用(1)
    python的学习笔记(0)之循环的使用1
    java基础面试题10--String--统计大串中小串出现的次数
    13 ftp软件安装过程
    12 软件安装的两种方式
    rpm方式安装MySQL5.1.73
    java基础面试题9--数组高级-二分查找
  • 原文地址:https://www.cnblogs.com/hsj-jingyu/p/9257814.html
Copyright © 2011-2022 走看看