标签:avg asc 官方 gre 获取 exclude 一个 主键 字段名
QuerySet表示数据库中对象的列表。他可以有0到国歌过滤器。过滤器通过给定参数,缩小查询范围(filter)。
QuerySet等同与select语句,过滤器等同于一个限制字句,比如where、limit
.query
可查看对应的SQL语句name.objects.all()queryset
name.objects.first()返回的是对象
name.objects.last()返回的是对象
select子句
使用and连接,关键字参数的形参必须是模型中的字段名。Student.objects.filter(name='xinlan').filter(age=18)
Student.objects.order_by('-age', 'name').query)
# 默认asc,-age 代表反向排序
[::]
字典
列表中,只会包含我们指定的字段。如果不指定,包含所有字段。from django.db.models import Q
from django.db.models import Q
res = Student.objects.filter(Q(age=18)|Q(age=19)).only('name')
# 等价于下面的sql
SELECT `teacher_student`.`id`, `teacher_student`.`name` FROM `teacher_student` WHERE (`teacher_student`.`age` = 18 OR `teacher_student`.`age` = 19)
查询条件
Student.objects.filter(name__exact=‘XXX‘)#_exact可以不写
语法都是field__conditon=
是 两个下划线
count() ,统计。返回queryset的长度
聚合函数
语法:
list_name.objects.aggregate(anyname=Avg('age'))
#必须要用aggregate方法,anyname自己命名
#返回的市dit字典,不是query语句,无法查询sql语句
# 计算同学们的年龄平均值
res = Student.objects.aggregate(age_avg=Avg('age'))
# 找到最大的年龄
res = Student.objects.aggregate(age_max=Max('age'))
# 查询男生女生分别有多少人
In [84]: from django.db.models import Count
#必须要导入模块
In [85]: res = Student.objects.values('sex').annotate(Count('sex'))
官方文档说明:
https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types
django 中,模型通过特殊的字段进行关系连接
例如:
anyname = models.OneToOneField('class_name',on_delete=models.CASCADE)#on_delete级联等外键关系
注意事项:
多对多关系,如果第三方表还有额外得到属性,需要手动创建第三方表并加入额外属性。并且要使用through
属性指定第三张表。
例如:
class A(models,Model):
pass
class B(models,Model):
anyname = models.ManyToManyField('A',through='C')
#B和A表多对多关联,手动生成第三方表,通过through指定第三方表C,在表C中可以添加额外属性
class C(models,Model):
pass
标签:avg asc 官方 gre 获取 exclude 一个 主键 字段名
原文地址:https://www.cnblogs.com/pygive/p/10724294.html