本节将讨论如何从数据库中获取信息并与其进行交互。
Django设置了强大的数据库抽象API,并以此方便地创建、获取、更新及删除对象。同时,Django的对象关系映射器(ORM)兼容于Mysql/PostgreSQL/SQLite/Oracle及MariaDB。
Django ORM基于QuerySets,一个QuerySets可视为一个数据库查询集合,以检索数据库中的对象,用户可在QuerySets上使用过滤器,进而根据给定的参数来缩小查询结果的范围。
一、创建对象
python manage.py shell
启动Python shell
方法一:通过实例化模型对象,再加上.save()
来持久化
方法二:直接使用模型.objects.create()
来创建
二、更新对象
直接赋值,save()方法执行了Update语句
三、检索对象
每个Django模型至少包含一个管理器,并且默认将管理器称作objects。通过模型管理器,可以得到一个QuerySets对象。
1.获取所有内容
Post.objects.all()
2.使用filter()方法
Post.objects.filter()
3.使用exclude()方法
此方法,可以排除QuerySets中特定的结果。
例如,可获取标题不是以Why开始的,发布于2022年的全部帖子,如下所示:
4.使用order_by()方法
此方法可以对结果进行排序,在字段前加-(负号)
表示降序排列。
四、删除对象
五、评估QuerySet
QuerySet的创建过程在其被评估之前并不会涉及数据库操作。通常其返回另一个未被评估的QuerySet。我们可以连接多个过滤器到一个QuerySet上,在QuerySet计算之前都不会访问数据库。
QuerySet仅在下列场景被计算:
- 首次迭代时
- 当对QuerySet访问时,如Post.objects.all()[:3]
- 当对QuerySet缓存时
- 当对QuerySet上调用repr()或len()时
- 当在QuerySet上显式调用List()时
- 当在某个语句中对QuerySet进行测试时,如bool(),or,and 或者if
六、创建模型管理器
通常一个模型默认一个objects
管理器,我们可以在models.py
文件中定义自己的模型管理器。
注意点:
- 继承models.Manager,重写get_queryset()方法
- 想要同时使用默认的管理器,必须要显示申明