Django模型(三)

如果获取一个对象,直接使用[0],等同于[01].get(),但是如果没有数据,[0]引发IndexError异常,[01].get()如果没有数据引发DoesNotExist异常。使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用。查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。.....
摘要由CSDN通过智能技术生成

目录

3.数据库的查询

3.1.基本查询

1 基本查询

2 过滤查询

3.2.F和Q对象

3.3 .聚合函数和排序函数

1. 聚合函数

2. 排序

3.4.关联查询

关联无过滤查询

关联过滤查询

3.5查询集QuerySet

1 概念

2 两大特性

3 限制查询集

4.分页


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: 武动乾坤>]>

>>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值