讲课笔记10:使用QuerySet删除和查询数据表

(一)删除数据

删除数据有3种方式:删除数据表的全部数据、删除一行数据和删除多行数据.

1、删除全部数据:all()与delete()

查看commodity_types表(14条记录)
在这里插入图片描述
导出数据库脚本 - babies.sql
在这里插入图片描述
在这里插入图片描述
输入python manage.py shell,没有下载ipython
在这里插入图片描述
使用pip install ipython 命令
在这里插入图片描述
在终端Shell模式下执行命令:Types.objects.all().delete(),删除全部记录

在这里插入图片描述
返回数据库进行查看
在这里插入图片描述
已全部删除

2、删除一行数据:get()与delete()

导入数据有两种方式:一种是运行SQL脚本,一种是使用loaddata命令
导入数据到表:python manage.py loaddata commodity_types_data.json
在这里插入图片描述在这里插入图片描述

要将数据文件改成不带BOM的UTF-8编码格式
在这里插入图片描述
在这里插入图片描述
重新导入数据到表:python manage.py loaddata commodity_types_data.json
在这里插入图片描述
再次查看
在这里插入图片描述
在终端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个模型类
from django.db import models
class PersonInfo(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=20)
age=models.IntegerField()
hireDate=models.DateField()

def __str__(self):
    return self.name
class Meta:
    verbose_name='人员信息'

class Vocation(models.Model):
id=models.AutoField(primary_key=True)
job=models.CharField(max_length=20)
title=models.CharField(max_length=20)
payment=models.IntegerField(null=True,blank=True)
name=models.ForeignKey(PersonInfo,on_delete=models.CASCADE,related_name=‘ps’)
def str(self):
return str(self.id)
class Meta:
verbose_name=‘职业信息’
在这里插入图片描述在终端执行数据迁移命令: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()

在这里插入图片描述
查看index_vocation表
在这里插入图片描述

(二)、查询(一)

1、给两张表准备查询数据

(1)给index_personinfo表准备数据

使用sql 执行下列代码:
INSERT INTO index_personinfo VALUES (1, ‘李红利’, 25, ‘2021-04-15’);
INSERT INTO index_personinfo VALUES (4, ‘张三丰’, 22, ‘2020-11-22’);
INSERT INTO index_personinfo VALUES (5, ‘唐小林’, 28, ‘2019-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表准备数据

使用sql 执行下列代码:
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, ‘软件开发’, ‘嵌入式开发工程师’, 18000, 6);
INSERT INTO index_vocation VALUES (8, ‘软件开发’, ‘Android开发工程师’, 8000, 7);
在这里插入图片描述
查看index_vocation表记录
在这里插入图片描述

2、查询全部数据:all()

(1)查询index_personinfo表全部记录

在Shell模式下执行下列操作
在这里插入图片描述

可以遍历查询集显示每个人员的详情
在这里插入图片描述

(2)查询index_vocation表全部记录

在Shell模式下执行下述操作
在这里插入图片描述

3、查询前3条数据:all()[:3]

(1)查询index_personinfo表前3条记录

在这里插入图片描述

查询index_personinfo表后3条记录

在这里插入图片描述

Django的查询集不支持负索引
在这里插入图片描述在这里插入图片描述

(2)查询index_vocation表前3条记录

在这里插入图片描述
查询第5到6条记录:
在这里插入图片描述
用get()方法更加简单
在这里插入图片描述
使用切片运算
在这里插入图片描述

4、以字典列表形式查询某个字段数据:values() - 投影运算

查询index_vocation表job字段的数据
在这里插入图片描述
总共有多少种不同的职业(去重)
在这里插入图片描述
在这里插入图片描述

5、以元组列表形式查询某个字段数据:values_list()

查询index_vocation表job字段的数据
在这里插入图片描述

6、使用get()函数查询一条记录

查询index_vocation表id=2的记录
在这里插入图片描述

7、使用filter()函数查询多条记录

查询index_vocation表中job='软件开发’的记录

在这里插入图片描述

8、使用Q()函数与‘|’进行查询(类似于“或”的关系)

查询job='网站设计’或id=‘软件开发’的记录
在这里插入图片描述

9、使用Q()函数与‘&’进行与查询

查询薪水18000的软件开发纪录
在这里插入图片描述

10、使用~Q()表示不等于关系

查询job=“网站设计”或id=3或title="Java开发工程师"的职业信息
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值