Model 层 QuerySet 的使用
Model
作为MVC模式中的基础层(数据层)负责为整个系统提供数据。- 在Model层中,
Django
通过给Model
增加一个objects
属性来提供数据操作的接口。比如想要查询所有文章的数据,可以这么写:xxx.objects.all()
,这样就能拿到QuerySet
对象。这个对象包含了我们需要的数据,当我们用到他时,它会去DB中获取数据 - 就是用到数据时才会去DB中查询,而不是执行
xxx.objects.all()
时去执行数据库查询语句的,原因是QuerySet
要支持链式操作。如果每次执行都要查询数据库的话,会存在性能问题,因为你可能用不到你执行的代码,所以QuerySet
是懒加载的 - 链式调用:执行一个对象的方法之后得到的结果还是这个对象,这样可以接着执行对象的其他方法。例如:
posts = Post.objexts.filter(status=1).filter(category_id=2)
常用的QuerySet接口
- 支持链式调用的接口
-
all
接口,相当于SELECT * FROM table_name
语句,用于查询所有数据 -
filter
接口,根据条件过滤数据,常用的条件基本上是字段等于
、不等于
、大于
、小于
。还有能改成LIKE
查询的:Model.objects.filter(content__contains="条件")
-
exclude
接口,同filter,只是相反的逻辑 -
reverse
接口,把QuerySet中的结果倒序排列 -
distinct
接口,用来进行去重查询,产生SELECT DISTINCT
这样的SQL
查询 -
none
接口,返回空的QuerySet
-
- 不支持链式调用的接口
不支持链式调用的接口即返回值不是QuerySet的接口-
get
接口,例如Post.objects.get(id=1)
用于查询id
为1的文章,存在则返回实例,不存在则抛出异常 -
create
接口,用来直接创建一个Model
对象 -
get_or_create
接口,根据条件查找,如果没有查找到,就调用create
调用 - update_or_create 接口,同get_or_create,只是用来做更新操作
-
count
接口,返回QuerySet
有多少条记录 -
latest
接口,返回最新的一条记录,需要在Meta
中定义:get_latest_by = <用来排序的字段>
-