基础概念
- 在django中,
model.py
中的每一个继承了django.db.models.Model
的类(多好地方把这个类叫做“类模型”、“模型类”、“模型”)都代表一个数据库表。 - 模型类中的每一个属性都代表数据库表中的一个字段。
- 模型类的每一个对象都是数据库表中的一条记录。
查询
当我们创建数据库模型后,django会自动提供给我们数据库抽象API(就是一些函数),通过这些API我们可以执行创建、取回(查找)、更新、删除的操作。常用的函数有all()
、get()
、filter()
、exclude()
。其他的方法见QuerySet API Reference。
取回记录
当从数据库中取回记录时,模型类上的Manager
会返回一个QuerySet
(一个集合),要取回的记录就暂存在这个集合里面。
一个QuesrySet
由两部分构成,第一部分是数据库表中的所有的记录,另一部分是一些过滤器。过滤器的作用就是根据给定的查询参数筛选查询结果。与SQL过程相比,一个QuerySet
等价于select
状态,过滤器就是一些像limit
、where
一样的限制条件。
函数
假设模型类是Blog
Blog.objects.all()
函数会返回一个QuerySet
,里面包含着Blog
表中的所有的记录。
Blog.objects.filter()
函数会返回一个QuerySet
,里面包含着满足filter条件的Blog
表中的所有的记录。
Blog.objects.exclude()
函数会返回一个QuerySet
,里面包含着不满足filter条件的Blog
表中的所有的记录。
Blog.objects.get()
上面的三个函数都无论查到的结果中有几条记录,都会以集合的方式返回,唯独get函数只返回一条记录,比如我要查id=2019
的记录,执行语句Blog.objects.get(id='2019')
,当Bolg
中不存在满足条件的记录时会报异常DoesNotExist
,当Blog
中满足条件的记录的数量大于1时,也会报异常MultipleObjectsReturned
。