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=[11, 22, 33]) # 获取id等于11、22、33的数据
models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
models.Tb1.objects.filter(name__contains="ven") # 名字包含ven的
models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
models.Tb1.objects.filter(id__range=[1, 2]) # 范围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()

浙公网安备 33010602011771号