Django 模型的基础查询
Posted cmzlogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 模型的基础查询相关的知识,希望对你有一定的参考价值。
基础条件查询
1 基本查询
get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。
all查询多个结果。
count查询结果数量。
>>> BookInfo.objects.get(id=1)
<BookInfo: 射雕英雄传>
>>> BookInfo.objects.get(pk=2)
<BookInfo: 天龙八部>
>>> BookInfo.objects.get(pk=20)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/python/.virtualenvs/py3_django_1.11/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/python/.virtualenvs/py3_django_1.11/lib/python3.5/site-packages/django/db/models/query.py", line 380, in get
self.model._meta.object_name
book.models.DoesNotExist: BookInfo matching query does not exist.
>>> BookInfo.objects.all()
<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 笑傲江湖>, <BookInfo: 雪山飞狐>]>
>>> BookInfo.objects.count()
4
2 过滤查询
实现SQL中的where功能,包括
filter过滤出多个结果
exclude排除掉符合条件剩下的结果
get过滤单一结果
对于过滤条件的使用,上述三个方法相同,故仅以filter进行讲解。
过滤条件的表达语法如下:
属性名称__比较运算符=值
# 属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线
查询编号为1的图书
查询书名包含‘湖‘的图书
查询书名以‘部‘结尾的图书
查询书名为空的图书
查询编号为1或3或5的图书
查询编号大于3的图书
查询1980年发表的图书
查询1990年1月1日后发表的图书
1)相等
exact:表示判等。
例:查询编号为1的图书。
BookInfo.objects.filter(id__exact=1)
可简写为:
BookInfo.objects.filter(id=1)
2)模糊查询
contains:是否包含。
说明:如果要包含%无需转义,直接写即可。
例:查询书名包含‘传‘的图书。
BookInfo.objects.filter(name__contains=‘传‘)
<QuerySet [<BookInfo: 射雕英雄传>]>
startswith、endswith:以指定值开头或结尾。
例:查询书名以‘部‘结尾的图书
>>> BookInfo.objects.filter(name__endswith=‘部‘)
<QuerySet [<BookInfo: 天龙八部>]>
以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.
3) 空查询
isnull:是否为null。
例:查询书名为空的图书。
>>> BookInfo.objects.filter(name__isnull=True)
<QuerySet []>
4) 范围查询
in:是否包含在范围内。
例:查询编号为1或3或5的图书
>>> BookInfo.objects.filter(id__in=[1,3,5])
<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 笑傲江湖>]>
5)比较查询
gt大于 (greater then)
gte大于等于 (greater then equal)
lt小于 (less then)
lte小于等于 (less then equal)
例:查询编号大于3的图书
BookInfo.objects.filter(id__gt=3)
不等于的运算符,使用exclude()过滤器。
例:查询编号不等于3的图书
>>> BookInfo.objects.filter(id__gt=3)
<QuerySet [<BookInfo: 雪山飞狐>]>
6)日期查询
year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。
例:查询1980年发表的图书。
>>> BookInfo.objects.filter(pub_date__year=1980)
<QuerySet [<BookInfo: 射雕英雄传>]>
例:查询1990年1月1日后发表的图书。
>>> BookInfo.objects.filter(pub_date__gt=‘1990-1-1‘)
<QuerySet [<BookInfo: 笑傲江湖>]>
以上是关于Django 模型的基础查询的主要内容,如果未能解决你的问题,请参考以下文章