目录
3.数据库的查询
查询的的数据库数据有:
3.1.基本查询
1 基本查询
get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。
all查询多个结果。
count查询结果数量。
示例:
# 打开shell,导入相关的模块
>>> from book.models import BookInfo,PeopleInfo
# get方法的使用,通过id来查询
>>> BookInfo.objects.get(id=1)
<BookInfo: 斗罗大陆>
# get方法的使用,通过主键来查询
>>> BookInfo.objects.get(pk=4)
<BookInfo: 牧龙师>
# all方法的使用
>>> BookInfo.objects.all()
<QuerySet [<BookInfo: 斗罗大陆>, <BookInfo: 斗破苍穹>, <BookInfo: 武动乾坤>, <BookInfo: 牧龙师>]>
# 当查询的结果不存在时,会报错,错误类型是:DoesNotExist
>>> BookInfo.objects.get(id=10)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/samual/.virtualenvs/py_django/lib/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/samual/.virtualenvs/py_django/lib/python3.8/site-packages/django/db/models/query.py", line 415, in get
raise self.model.DoesNotExist(
book.models.BookInfo.DoesNotExist: BookInfo matching query does not exist.
# 使用count方法查询结果数量
>>> BookInfo.objects.count()
4
2 过滤查询
实现SQL中的where功能,包括
- filter过滤出多个结果
- exclude排除掉符合条件剩下的结果
- get过滤单一结果
对于过滤条件的使用,上述三个方法相同,故仅以filter进行讲解。
过滤条件的表达语法如下:
属性名称__比较运算符=值
# 属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线
1)相等
exact:表示判等。
示例:查询编号为1的图书。
>>> BookInfo.objects.filter(id__exact = 1)
<QuerySet [<BookInfo: 斗罗大陆>]>
# 可以简写为:(exact为等于,可以省略不写)
>>> BookInfo.objects.filter(id = 1)
<QuerySet [<BookInfo: 斗罗大陆>]>
2)模糊查询
contains:是否包含。
说明:如果要包含%无需转义,直接写即可。
示例:查询书名包含'斗'的图书。
>>> BookInfo.objects.filter(name__contains = '斗')
<QuerySet [<BookInfo: 斗罗大陆>, <BookInfo: 斗破苍穹>]>
startswith、endswith:以指定值开头或结尾。
示例:查询书名以‘武’开头的图书,以‘师’结尾的图书
>>> BookInfo.objects.filter(name__startswith = '武')
<QuerySet [<BookInfo: 武动乾坤>]>
>>>