一般操作
必会部分:
all() 查询所有结果,最终的结果为QuerySet对象.
models.Press.objects.all() # 查询所有出版社
**get(**kwargs)** 返回与所给筛选条件相匹配的对象,返回结果只有一个,如果符合筛选条件的对象超过一个或者一个也没有,就会报错.最终结果为一个对象.
models.Press.objects.get(id=1) # 查询id等于1的出版社
**filter(**kwargs)** 它包含了与所给筛选条件相匹配的所有对象,最终返回结果为QuerySet对象.
models.Press.objects.filter(id=1) # 查询id等于1的所有出版社
**exclude(**kwargs)** 它包含了与所给筛选条件不匹配的所有对象,最终结果为QuerySet对象.
models.Press.objects.exclude(id=1) # 查询id不等于1的所有出版社
values(*field) 返回一个ValueQuerySet —— 一个特殊的QuerySet,运行后得到的并不是一些列的model的实例化对象。而是一个可迭代的字典序列。简单点说就是ValueQuerySet列表中包含着查询到的结果,每一个结果为一个字典,字典中键为field字段,值为查到的结果。当field不写时,查询到所有的字段。
models.Press.objects.all().values() # 查询所有对形象的所有字段,每条记录为一个字典
models.Press.objects.all().values('id', 'name') # 查询所有对象的id和name字段,每条记录为一个字典
values_list(*field) 与values()非常相似,区别就是他返回的是一个元祖序列.
models.Press.objects.all().values_list() # 查询所有对形象的所有字段,每条记录为一个元祖,顺序为values_list()中填写的字段的顺序
models.Press.objects.all().values_list('id', 'name') # 查询所有对象的id和name字段,每条记录为一个元祖,顺序为values_list()中填写的字段的顺序
order_by(*field) 对查询结果进行排序.最终的查询结果为QuerySet对象.当给*field前边加负号(-)时,按降序排序.
1 models.Press.objects.all().order_by('-id') # 查询结果按照id降序排列.结果为QuerySet对象.
2
3 models.Press.objects.all().order_by('age','-id') # 查询结果先按照age字段增序排列,出现相同age时再按照id降序排列.结果为QuerySet对象.
reverse() 对查询结果进行反序排序,请注意reverse()通常只能在具有已定义排序的QuerySet上调用(在model类的Meta中指定order_by()或者调用ordering方法.).
models.Person.objects.all().reverse()
distinct() 从返回结果中剔除重复记录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果.此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重.),返回结果为QuerySet对象.
count() 返回数据库中匹配查询(QuerySet)的对象数量.
models.Person.objects.all().count()
first() 返回第一条记录(对象),必须是返回结果为QuerySet时才能使用first()
models.Person.objects.all().first()
last() 返回最有一条记录(对象),必须是返回结果为QuerySet时才能使用last()
models.Person.objects.all().last()
exists() 如果QuerySet包含数据,就返回True,否则返回False.
models.Person.objects.all().exists()
单表查询值神奇的双下划线
**字段名__gt** greater than 大于
ret = models.Person.objects.filter(id__gt=1) # 查询id大于1的所有对象
**字段名__lt** less than 小于
ret = models.Person.objects.filter(id__lt=4) # 查询id小于4的所有对象
**字段名__gte** greater than equal 大于等于
ret = models.Person.objects.filter(id__gte=1) # 查询id大于等于1的所有对象
**字段名__lte** less than equal 小于等于
ret = models.Person.objects.filter(id__lte=1) # 查询id小于等于1的所有对象
**字段名__in** 在什么里
ret = models.Person.objects.filter(id__in=[1, 3]) # 查询id在列表里的所有对象
**字段名__range=[条件1, 条件2]**等价于 字段名__gte=条件1,字段名__lte=条件2,其中逗号(,)表示and关系.[条件1, 条件2]为闭区间.
ret = models.Person.objects.filter(id__gte=1, id__lte=3) # 查询id大于等于1,小于等于3的所有对象
ret = models.Person.objects.filter(id__range=[1, 3]) # 查询id在1到3之间的所有对象
**字段名__contains='x'** 模糊查找含有x的所有对象
ret = models.Person.objects.filter(name__contains='e') # 查询name中含有e的所有对象
**字段名__icontains='x'** 忽略大小写,模糊查找含有x的所有的对象
ret = models.Person.objects.filter(name__icontains='e') # 忽略大小,查找name中含有e的所有对象
**字段名__startswith='o'** 匹配以o开头的所有对象
ret = models.Person.objects.filter(name__startswith='e') # 匹配name中以e开头的所有对象
**字段名__istartswith='o'** 忽略大小写,匹配以o开头的所有对象
ret = models.Person.objects.filter(name__istartswith='e') # 忽略大小写,匹配name中以e开头的所有对象
**字段名__endswith='x'** 匹配以x结尾的所有对象
ret = models.Person.objects.filter(name__endswith='x') # 匹配name中以x结尾的所有对象
**字段名__iendswith='x'** 忽略大小写,匹配以x结尾的所有对象
ret = models.Person.objects.filter(name__iendswith='x') # 忽略大小写,匹配name中以x结尾的所有对象
date字段还可以:
models.Class.objects.filter(first_day__year=2017)