七、Django模型基础第二节——常用查询

本文深入讲解Django模型字段类型及参数,包括整型、字符、日期等字段,并介绍如何使用ORM进行数据查询,如获取单条或多条记录、条件筛选、排序及聚合操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 常用的模型字段类型

官方文档链接:

https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types

  • 常用的字段类型
模型字段类型映射到数据库中类型备注
IntegerField整型int-
CharField字符类型varchar通过max_length指定最大长度
TextField文本类型text-
BooleanField布尔类型tinyint使用时传递True/False
DateField日期类型date没有时间
DateTimeField日期时间类型datetime使用时,传递datetime.datetime()

注:DateField使用时,可以设置DateField.auto_now,每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add,当对象第一次被创建时自动设置当前时间。

2 字段的常用参数

官方文档链接:

https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options

  • Field常用参数
参数作用
primary_key指定是否为主键
unique指定是否唯一
null指定是否为空,默认为False
blank等于True时form表单验证时可以为空,默认为False
default设置默认值
DateField.auto_now每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才有的
DateField.auto_now_add第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值

3 常用查询

通过模型类上的管理器来构造QuerySet。

  • 模型类上的管理器是啥? 模型类.objects

  • QuerySet 表示数据库中对象的集合。 等同于select 语句。 惰性的

方法作用
first()获取第一条 返回的是对象
last()获取最后一条 返回的也是一个对象
get(**kwargs)根据给定的条件,获取一个对象,如果有多个对象符合则报错
all()获取所有记录 返回的是queryset
filter(**kwargs)根据给定的条件,获取一个过滤后的queryset,多个条件使用and连接
exclude(**kwargs)跟filter使用方法一致,作用相反,它是排除
Q多条件的OR连接 用到Q对象,django.db.models.Q
values(*fields)返回一个queryset,返回一个字典列表,而不是数据对象
only(*fiels)返回querySet ,对象列表,注意only一定包含主键字段
defer(*fields)返回一个QuerySet,作用和only相反
order_by(*fields)根据给定的字段来排序 默认是顺序,字段名前加上 ‘-’代表反序
切片和python的列表切片用法相似,不支持负索引,数据量大时不用步长
  • 常用查询条件 filter,exclude, get
方法作用
exact等于
iexact等于(不区分大小写)
contains包含
icontains包含(不区分大小写)
in间隔范围查询
range连续范围查询
gt、gte大于、大于等于
lt、lte小于、小于等于
startswith起始
istartswith起始(不区分大小写)
endswith结束
iendswith结束(不区分大小写)
isnull为空,True False 对应 IS NULL IS NOT NULL
  • 聚合

1 from django.db.models import Count, Avg, Max, Min, Sum

通过queryset的aggregate方法

1 Student.objects.aggregate(age_avg=Avg('age'))  # 计算平均年龄
    • count

    • 平均值 Avg

  • 分组,聚合 结合 Values,annotate 和聚合方法一起实现

 

 

 

 

转载于:https://www.cnblogs.com/weixiansheng/p/10719918.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值