一、ORM操作有哪些?
二、管理器对象
三、ORM操作的具体内容
1、创建数据
方案1 验证:
方案2 验证:
2、查询操作
(1)不带条件的查询操作
(2)带条件的查询操作
filter()返回QuerySet,里面的元素是MyModel类的实例对象
MyModel.objects.filter(条件1, 条件2) = select * from MyTable where 条件1 and 条件2;
exclude()返回QuerySet,里面的元素是MyModel类的实例对象
MyModel.objects.exclude(条件1, 条件2) = select * from MyTable where not (条件1 and 条件2);
get()返回的是MyModel类的实例,而不是QuerySet,因为它只返回满足条件的唯一一条数据,如果满足条件的数据多于一条或为0条,则直接报错。
注意:使用get()时,记得用try,为了防止多条数据符合条件或没有数据符合条件引起的报错。
(3)非等值过滤查询——查询谓词
在以后的工作中,__exact通常用来实现SQL中的is null操作
注意:__range(A, B)表示:A <= X <= B
(4)更新操作
更新单个数据:
更新批量数据:
注意:books.upsate(条件)也是有返回值的,返回值就是此次操作成功更新的数据的条数。
(5)删除操作
删除单个数据:
删除批量数据:
伪删除
(6)F对象(面试高频)
上面这个(F对象)等于是没有查数据,直接交给数据库更新;而下面for循环的这个是要先拿到数据才能改。
场景:
假设要做一个文章或视频点赞的功能,某人发布视频后,有N个人在同一时刻点赞,那么如果按照常规方法先拿到数据,那么这N个人同一时刻拿到的点赞数据都是0,然后加1,再存到数据库,等于把‘点赞’=1反复执行了N遍,最后虽然有N个人点赞,可数据库中存储的点赞数却是1。
(7)Q对象(面试高频)
3、聚合查询
(1)整表聚合:不带分组的聚合查询
注意:整表聚合返回的值是一个字典
(2)分组聚合