跳至主要內容

模型_数据的其它查询

刘春龙原创...大约 2 分钟PythonDjango教程文档

文档:https://docs.djangoproject.com/zh-hans/4.1/ref/models/querysets/#countopen in new window

排序

Queryset.order_by(*fields)

默认情况下,QuerySet 返回的结果是按照模型 Meta 中的 ordering 选项给出的排序元组排序的

class Meta:
  ordering = ['name']

也可以通过使用 order_by 方法在每个 QuerySet 的基础上覆盖这一点,举例:

Waiter.objects.filter(induction__year=2030).order_by('-induction','id')

上述结果将按 induction 降序排列,然后按 id 升序排列。"-induction" 前面的负号表示 降序。升序是隐含的

其它查询

  • reverse() 反向返回查询集元素的顺序
  • count() 返回一个整数,表示数据库中与 QuerySet 匹配的对象数量
  • first() 返回的是查询集中的第一个对象
  • last() 返回的是查询集中的最后一个对象
  • values()
    • 返回一个 QuerySet,当用作可迭代对象时,返回字典,而不是模型实例, 其中每一个字典都代表一个对象,键与模型对象的属性名相对应
    • values() 方法接受可选的位置参数 *fields,它指定了 SELECT 应该被限制的字段名
from food_app.models import Waiter
# 获取所有数据
Waiter.objects.all()
# 获取所有数据,按id排序,升序
Waiter.objects.all().order_by('id')
# 获取所有数据,按id排序,降序
Waiter.objects.all().order_by('-id')
# 获取所有数据,按id排序,升序,反序
Waiter.objects.all().order_by('id').reverse()
# 获取所有数据,按induction排序,升序
Waiter.objects.all().order_by('induction')
# 获取2030-6-7之前入职的数据,按induction排序升序,若值相同按id排序降序
Waiter.objects.filter(induction__lt='2030-6-7').order_by('induction','-id') # 获取2030-6-7之前入职的数据,统计数量
Waiter.objects.filter(induction__lt='2030-6-7').count()
# 获取2030-6-7之前入职的数据,获取第1条
Waiter.objects.filter(induction__lt='2030-6-7').first()
# 获取2030-6-7之前入职的数据,获取最后1条
Waiter.objects.filter(induction__lt='2030-6-7').last()
# 获取2030-6-7之前入职的数据,将数据转成dict放在QuerySet中
Waiter.objects.filter(induction__lt='2030-6-7').values()
# 获取2030-6-7之前入职的数据,将数据转成dict,只要id与name字段,放在QuerySet中
Waiter.objects.filter(induction__lt='2030-6-7').values('id','name')

提示

大部分检索是懒惰执行的,只在真实获取值的时候,才会去连接数据库获取数据

# 还没获取数据
w1 = Waiter.objects.filter(induction__lt='2030-6-7').values('id','name')
# 获取数据
print(w1)
# 获取数据,因为要做数据切片
w1 = Waiter.objects.filter(induction__lt='2030-6-7').values('id','name')[:2]
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7