django学习~models之查询

时间:2025-05-15 22:37:38

一 简介:今天学习models查询的一些东西

二 理解概念

Queryset

定义 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet

三 细节学习

一 常用的models函数

.all() 全表
.filter() 过滤
.exclude() 排除
.values() 指定值(字典)
.values_list() 指定值(元组 )
.order_by()排序
.exits() 是否存在
.update() 更新
.delete() 删除
.distinct() 去重
.union()联合
.count() 统计
.create()存储

二 全表查询
userinfo.objects.all().values('username') 返回值 某个字典 类似 [{'username': u'chenc'}, {'username': u'zan'}】
userinfo.objects.all().values_list('username') 返回值 某个元祖 [(u'chenc',), (u'zan',), (u'zhangsan',)] .values_list() 也可以添加多个字段
三 范围查询
models.Tb1.objects.filter(id__lt=10, id__gt=1) 查询 1-10
models.Tb1.objects.filter(id__in=[11, 22, 33]) 查询 in
models.Tb1.objects.exclude(id__in=[11, 22, 33]) 查询 not in
models.Tb1.objects.filter(id__range=[1, 2]) 查询between and
models.Tb1.objects.filter(name='seven').order_by('id') 排序('id') 升序 ('-id') 降序
四 多条件查询
1 链式查询

models.Tb1.objects.filter().filter()

2 传Q对象,构造搜索条件

Q(question__startswith='Who') | Q(question__startswith='What')  or关系

Q(question__startswith='Who') ,Q(question__startswith!='What')  and关系

注意 1 Q参数必须要在具体值参数之前

News.objects.get(Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),question__startswith='Who')

2 Q对象使用之前要先导入

from django.db.models import Q

推荐使用方案2

五 查询条件构成
models.Tb1.objects.filter(字段名__相应函数=value).函数()

六 get和filter区别

输入参数
get的参数只能是model中定义的那些字段,只支持严格匹配,唯一一条记录
filter的参数可以是字段,也可以是扩展的where查询关键字,如in,like等

返回值
get返回值是一个定义的model对象
filter返回值是一个新的QuerySet对象,然后可以对QuerySet在进行查询返回新的QuerySet对象,支持链式操作
QuerySet一个集合对象,可使用迭代或者遍历,切片等,但是不等于list类型(使用一定要注意)

template

get   get.name

filter  for i in filter

i.name

endfor

七 总结
通过以上我们知道,熟知两部分相应的函数能使我们快速的进行数据查询,可以参考官方文档