Django(API之单表查询)

一、单表操作

基于对象查询记录API:

  table.objests.all()  # 返回的QuerySet类型,查询所有记录

  table.objests.filter()  # 返回的QuerySet类型,查询所有符合条件的记录

  table.objests.exclude()  # 返回的QuerySet类型,查询所有不符合条件的记录

  table.objests,get()  # 返回的models对象,查询结果必须有且只有一个,否则报错

  table.objests.all().first()  # 返回的models对象,查询结果为集合的第一个对象

  table.objests.all().last()   # 返回的models对象,查询结果为集合的最后一个对象

  table.objests.all().values("name","class_id")  # 返回的QuerySet类型,列表中存放的字典

  table.objests.all().values_list("name","class_id")  # 返回的QuerySet类型,列表中存放的元组

  table.objests.all().order_by("class_id")  # 按指定字段排序,不指定,默认按主键排序(升序)

  table.objests.all().order_by("-class_id")  # 按指定字段排序,前面加个 - 代表是从高到低排序(降序)

  table.objests.all().count()  # 返回的记录个数

  table.objests.all().values("name").distinct()  # 查询该字段并去重 

  table.objests.all().exist()  # 如果QuerySet包含数据,就返回True,否则返回False,就是一个优化查询,就是把查到的记录提取一条(多了不管,没必须要都打印出来)

  table.objests.all().reverse()  # 对查询结果反向排序

双下划线单表查询:

  (1)、contains    #  包含

  (2)、icontains   #  不区分大小写

  (3)、endswith   #  以什么结尾的

  (4)、iendwith    #  不区分大小写以什么结尾

  (5)、exact        #  全等于

  (6)、iexact        #  不区分大小写等于

  (7)、in              #   在什么范围内

  (8)、isnull         #    是否为空

  (9)、startwith    #     以什么开头

  (10)、gt            #    大于

  (11)、lt              #   小于

  (12)、range       #     范围

  

  model.table.objests.filter(id__lt,id__gt=1)  # 获取id大于1且小于10的值

  models.Tb1.objects.filter(id__in=[112233])   # 获取id等于11、22、33的数据

  models.Tb1.objects.exclude(id__in=[112233])  # not in

  models.Tb1.objects.filter(name__contains="ven")  # 名字包含ven的

  models.Tb1.objects.filter(name__icontains="ven"# icontains大小写不敏感

  models.Tb1.objects.filter(id__range=[12])      # 范围bettwen and

 二、示列

  1、查询班级号大于2的都有哪些学生

  ret=Student.objects.filter(class_id__gt=2).values("name")

  2、查询名字里有e的都是哪些学生

  ret=Student.objects.filter(name__contains="e").values("name")

  3、查询生日是2017年12月的学生

   stu_list=Student.objects.filter(birth__year="2017",birth__month="12")

  for stu in stu_list:

    print(stu.name)

  4、查询除了大力的其他学生

  stu_list=Student.objects.exclude(name="大力")
  for stu in stu_list:
  print(stu.name)
 5、查询2017年出生的学生姓名跟所在班级(values是字典,values_list是元组)
  ret=Student.objects.filter(birth__year="2017").values("name","class_id")
  for stu in ret:
    print(stu["name"],stu.get("class_id"))
 6、查询都有哪些班级
  ret=Student.objects.all().values("class_id").distinct()
练习: 
(1) 查询所有书籍的名称 
    Book.objects.all().values("title")
(2) 查询价格大于100的书籍名称以及价格              
  Book.objects.filter(price__gt=100).values("title","price") (3) 查询2017年出版的所有以py开头的书籍名称
  Book.objects.filter(pubDate__year="2017",title__startswith="py").values("title") (4) 查询价格为50,100或者150的所有书籍名称及其出版社名称
  Book.objects.filter(price__in=[50,100,150]).values("title","pubDate") (5) 查询所有主键大于2小于5书籍的价格(去重)
  Book.objects.filter(nid__gt=2,nid__lt=5).values("price").distinct() (6) 查询所有人民出版社出版的书籍的价格(从高到低排序,去重)
  Book.objects.filter(publisher="人民出版社").values("price").order_by("-price").distinct()

  


 

 

 

 






 

posted @ 2017-12-13 16:51  俺老孫  阅读(380)  评论(0)    收藏  举报