Django讲课笔记10:使用QuerySet删除和查询单表
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django讲课笔记10:使用QuerySet删除和查询单表相关的知识,希望对你有一定的参考价值。
文章目录
零、本讲学习目标
- 掌握常用的删除记录的方式
- 掌握常用的查询数据的方式
- 掌握分组、排序、并、差、交操作
- 掌握多表查询
- 掌握原生SQL的3种查询方式
一、课程导入
- Shell下新增数据的7种方式
- Shell下更新数据的6种方式
二、新课讲授
任务:如何去掉关于路由斜杠的警告
- 运行项目,可以看到警告信息
- 修改主路由和子路由(斜杠加在主路由路径的尾巴上)
- 再次运行项目,看看还有没有讨厌的警告信息
(一)删除数据
删除数据有3种方式:删除数据表的全部数据、删除一行数据和删除多行数据.
1、删除全部数据:all()与delete()
-
查看commodity_types表(14条记录)
-
导出数据库脚本 - babies.sql
-
在终端Shell模式下执行命令:
Types.objects.all().delete()
,删除全部记录
-
查看commodity_types表
2、删除一行数据:get()与delete()
- 导入数据有两种方式:一种是运行SQL脚本,一种是使用loaddata命令
- 导入数据到表:
python manage.py loaddata commodity_types_data.json
- 要将数据文件改成不带BOM的UTF-8编码格式
- 重新导入数据到表:
python manage.py loaddata commodity_types_data.json
- 查看commodity_types表
- 在终端Shell模式下执行命令:
Types.objects.get(id=1).delete()
,删除id为1的记录
- 查看commodity_types表
3、删除多行数据:filter()与delete()
-
任务:删除全部“儿童用品” (目前只有三条记录满足条件)
-
在终端Shell模式下执行命令:
Types.objects.filter(firsts='儿童用品').delete()
,
-
删除了3条记录,查看commodity_types表
4、删除有外键的数据:delete()
删除数据的过程中,如果删除的数据设有外键字段,就会同时删除外键关联的数据。
(1)准备模型和表
-
在index模块的models.py中定义以下2个模型类
第22行定义了name为外键,关联的是PeronInfo对象,而且是级联删除。从模型 Vocation 得知,外键字段的参数 on_delete 用于设置数据删除模式,比如模型 Vocation的外键字段name设为CASCADE
模式,不同的删除模式会影响数据删除结果,说明如下:
–PROTECT
模式:如果删除的数据设有外键字段并且关联其他数据表的数据,就提示数据删除失败。
–SET_NULL
模式:执行数据删除并把其他数据表的外键字段设为Null,外键字段必须将属性 Null 设为 True,否则提示异常。
–SET_DEFAULT
模式:执行数据删除并把其他数据表的外键字段设为默认值。
–SET
模式:执行数据删除并把其他数据表的外键字段关联其他数据。
–DO_NOTHING
模式,不做任何处理,删除结果由数据库的删除模式决定。 -
在终端执行数据迁移命令:
python manage.py makemigrations
,生成数据迁移文件
-
在终端执行数据迁移命令:
python manage.py migrate index 0001_initial
,生成相应的数据表
-
查看生成的两张表:index_personinfo和index_vocation
(2)为index_personinfo准备测试数据
- 利用批量添加数据命令,添加三条记录
- 查看index_personinfo表
(3)为index_vocation准备测试数据
- 给“李红利”设置职业
- 查看index_vocation表
(4)级联删除id=1的李红利
- 在Shell模式下执行命令:
PersonInfo.objects.get(id=1).delete()
- 删除成功,总共删除了2条数据,1条是index_personinfo表的记录,1条是index_vocation表的记录。
- 查看index_personinfo表,“李红利”记录已被删除
- 查看index_vocation表,级联的记录(外键name_id=1)已被删除
(二)查询数据
1、给两张表准备查询数据
(1)给index_personinfo表准备数据
INSERT INTO `index_personinfo` VALUES (1, '李红利', 25, '2018-04-15');
INSERT INTO `index_personinfo` VALUES (4, '张三丰', 22, '2020-11-22');
INSERT INTO `index_personinfo` VALUES (5, '唐小林', 28, '2015-07-16');
INSERT INTO `index_personinfo` VALUES (6, '吴文燕', 23, '2019-03-19');
INSERT INTO `index_personinfo` VALUES (7, '郑晓红', 20, '2020-12-05');
- 查看index_personinfo表记录
(2)给index_vocation表准备数据
INSERT INTO `index_vocation` VALUES (1, '软件开发', 'Python开发工程师', 10000, 1);
INSERT INTO `index_vocation` VALUES (2, '软件开发', 'Java开发工程师', 12000, 3);
INSERT INTO `index_vocation` VALUES (3, '文员', '前台文员', 3000, 2);
INSERT INTO `index_vocation` VALUES (4, '需求分析', '系统需求分析师', 9000, 3);
INSERT INTO `index_vocation` VALUES (5, '网站设计', '前端开发', 8000, 4);
INSERT INTO `index_vocation` VALUES (6, '项目经理', 'Python项目经理', 20000, 5);
INSERT INTO `index_vocation` VALUES (7, '软件开发', 'C开发工程师', 12000, 6);
INSERT INTO `index_vocation` VALUES (8, '软件开发', 'android开发工程师', 8000, 7);
- 查看index_vocation表记录
三、课堂小结
四、课后作业
五、拓展内容
以上是关于Django讲课笔记10:使用QuerySet删除和查询单表的主要内容,如果未能解决你的问题,请参考以下文章