第一部分:
增:
save
实例名 = 模型类( 字段=值,字段=值,...)
需要 通过 实例名.save()
create
实例名 = 模型类.objects.create(字段=值,字段=值)
自动保存
删:
实例名.delete()
模型类.objects.filter(pk=1).delete()
改:
save
实例名.字段 = 值
实例名.save()
update
模型类.objects.filter(pk=1).update(字段=值,字段=值)
查:
1. 查询方法
get
获取单个数据
如果不存在会抛出模型类.DoesNotExist异常
all
获取所有数据
count
获取个数
相关查询总结
包含查询:contains
结尾查询: __endswith=
为空的查询: BookInfo.objects.filter(name__isnull=True)
编号查询: __in= 元组,字典,列表均可
编号大于与小于
大于:gt 小于:lt 大于等于:gte 小于等于:lte
2.筛选
filter
Bookinfo.objects.filter(字段名__运算符=值)
1.filter过滤出多个结果(包含0个,1个,多个)
2.查询结果将返回一个列表
and查询
filter().fiter()
filter(条件,条件,...)
exclude
排除掉符合条件的剩下的结果
3.F和Q
F:两个字段进行比较
filter(字段名__运算符=F('字段名'))
from django.db.model import F
Q: or
filter(Q(字段名__运算符=值)|Q(字段名__运算符=值))
not
filter(~Q(字段名__运算符=值))
让Q浪起来
4聚合函数
aggregate(Xxx('字段'))
from django.db.model import Xxx
字段名__聚合函数
5.排序
order_by
默认是升序
order_by('-字段')
降序
order_by('字段1','字段2,...)
6.关联查询
基本关联查询
一对多:
实例名. 反向查询的模型类名小写_set.all()
多对一:
外键名.字段
筛选关联查询
一对多
filter(模型类名小写__字段名__运算符=值)
多对一
filter(外键名__字段名__运算符=值)
7.limit
查询结果集[:]
当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表)
all():返回所有数据。
filter():返回满足条件的数据。
exclude():返回满足条件之外的数据。
order_by():对结果进行排序。
两大特性
1)惰性执行
创建查询集不会访问数据库,直到调用数据时,才会访问数据库
2)缓存
使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数
将数据放到一个地方,我们在使用的时候 直接到哪个地方获取就可以了
限制查询集
对查询集进行取下标或切片
注意点
不支持负数索引
8.管理器Manager
定义
Django的模型进行数据库操作的接口
默认的objects
是models.Manager类的对象
自定义管理器
一旦为模型类指明自定义的管理器后,Django不再生成默认管理对象objects
使用步骤
1.在models中自定义管理器
2.在models中创建query对象
3.在视图函数中调用