1.QuerySet API
我们通常做查询操作的时候,都是通过模型名字.objects的⽅式进⾏操作。其实
模型名字.objects是⼀个django.db.models.manager.Manager对象,⽽
Manager这个类是⼀个“空壳”的类,他本身是没有任何的属性和⽅法的。他的
⽅法全部都是通过Python动态添加的⽅式,从QuerySet类中拷⻉过来的
所以我们如果想要学习ORM模型的查找操作,⾸先要学会QuerySet上的⼀些
API的使⽤。
QuerySet的⽅法
在使⽤QuerySet进⾏查找操作的时候,可以提供多种操作。⽐如过滤完后还要
根据某个字段进⾏排序,那么这⼀系列的操作我们可以通过⼀个⾮常流畅的链
式调⽤的⽅式进⾏。⽐如要从⽂章表中获取标题为123,并且提取后要将结果根
据发布的时间进⾏排序,那么可以使⽤以下⽅式来完成
可以看到order_by⽅法是直接在filter执⾏后调⽤的。这说明filter返回的对象是
⼀个拥有order_by⽅法的对象。⽽这个对象正是⼀个新的QuerySet对象。因此
可以使⽤order_by⽅法。
可以看到order_by⽅法是直接在filter执⾏后调⽤的。这说明filter返回的对象是
⼀个拥有order_by⽅法的对象。⽽这个对象正是⼀个新的QuerySet对象。因此
可以使⽤order_by⽅法。
那么以下将介绍在那些会返回新的QuerySet对象的⽅法。
其实,filter 和 exclude 正好相反
举例:order_by
倒叙 就是用-price
价格一样时,按照id 排序
关联查询
values
因为上述是取出了所有字典信息,只是对象,所以要如下取数据可用, 用.ge’t
values 可以指定字段来查询呢,节省数据库性能
values_list
元组 用下标 取
create
直接 配合objects 插入一条数据库数据
举例:
get_or_create没查询出数据就创建
exsits
与之前几个方式不同,它会限制一条数据,不会都显示出来。
节省性能
update是在mysql中执行,不会更新auto_now设置的字段
切片,也节省了数据库性能开销
2. ORM 迁移命令
下面的迁移,都是按照后者依赖前者的逻辑,中间任何一个删除都会出错