最近在写一些个人的博客项目经常会遇到使用get和filter的操作,但是一旦调用的时候总是对他们的含义不够清晰。自己的查找资料总结如下:
QuerySet(查询结果集对象):
QuerySet是指从数据库中查询出来的结果,一般都是集合。Django会对查询返回的结果集QuerySet进行cache缓存,这是为了提高查询效率。就是在你创建一个QuerySet对象的时候,Django并不会立即向数据库发出查询命令,只有在你需要用到这个QuerySet的时候才会这样做,支持链式操作QuerySet一个集合对象,可使用迭代或者遍历,切片等。
Django中的模型类都有一个objects对象,它是一个Django中定义的QuerySet类型的对象,它包含了模型对象的实例。
get和filter()的区别。
get
输入参数:get的参数只能是model中定义的哪些字段,只支持严格匹配。
Entry.objects.get(id='foo') # raises Entry.DoesNotExist
返回参数:get 返回值是一个定义的model对象,只有一条记录返回的时候才正常,也就说明get的查询字段必须是主键或者唯一约 束的字段。当返回多条记录或者是没有找到记录的时候都会抛出异常
filter
输入参数:filter的参数可以是字段也可以是扩展的where查询关键字,如in,like,返回QuerySet包含与给定查找参数匹配的新对象。
返回参数:filter返回QuerySet对象,有没有匹配的记录都可以。
filter有缓存数据的功能,第一次查询数据库并生成缓存,下次再调用filter方法的话,直接取得缓存的数据,get方法每次执行都是直接查询数据库的。
filer若是查询不到数据,会返回一个空的查询集,[] type类型是:Queryset。查询到多余一条的时候会返回一个包含多个对象的查询集。
网友评论