django框架模型系统(二)-----数据的增删改查以及常用的查询方法

一、前言

前面在模型系统第一节中我们已经在数据库中创建好了student_user表,在本节中我会用shell来演示数据的增删改查
①在虚拟环境中 安装ipython(操作比较方便)

pip install ipython

②在项目目录下 打开shell
在这里插入图片描述

二、增

① 方法一
在这里插入图片描述
去数据库中查看,如下图所示,可以看到,数据已添加
在这里插入图片描述
② 方法二
在这里插入图片描述
③ 方法三(直接创建):
在这里插入图片描述
④ 方法四:
get_or_create(参数):它会根据参数去数据库中查找,若找到与之匹配的,则返回False,若没有找到,就会根据参数创建一条新的数据并返回True
在这里插入图片描述
此时数据库中的数据如下图所示:
在这里插入图片描述

三、查

① 查询所有记录对象
在这里插入图片描述
由上图可知,s为一个QuerySet对象(查询集)

关于QuerySet
从数据库中查询出来的结果一般是一个集合,这个集合叫QuerySet
QuerySet是可迭代对象,支持链式操作(方法后可再接方法)
QuerySet支持切片、索引,但不支持负索引
可以用list强行将QuerySet转换成列表

② 查询一个对象
在这里插入图片描述
由上图可知,get()方法返回的是单个对象,如果符合条件的对象有两个或多个,就会报错!!!
③ 查询满足条件的对象
在这里插入图片描述

注意:all()和filter()返回的都是QuerySet对象,而get()方法返回的是单个对象

四、改

① 先查到对象再给其属性赋值进行修改
在这里插入图片描述
由下图可知bob年龄已修改为20
在这里插入图片描述
② 使用update方法直接修改
在这里插入图片描述

注意:单个对象是没有update这个方法的,只能通过给属性赋值来修改

五、删

① 删除单个,可看到,bob已经被删除了
在这里插入图片描述
② 删除所有,删完后变为空的QuerySet
在这里插入图片描述

六、常用的查询方法

解释说明方法案例
获取第一条数据,返回的是对象rs = User.objects.first()
获取最后一条数据,返回的是对象rs = User.objects.last()
只查询单个字段rs = User.objects.only(‘id’)
除了这个字段不查,其它都查,与only作用相反rs = User.objects.differ(‘id’)
根据参数提供的条件获取过滤后的记录rs = User.objects.filter(name=‘bob’)
排除name为bob的记录,与filter作用相反rs = User.objects.exclude(name=‘bob’)
对字段进行排序,默认对结果进行从小到大排序rs = User.objects.order_by(‘age’)
逆向排序,只需在字段前加个负号即可,返回查询集,按从大到小排序rs = User.objects.order_by(’-age’)
多项排序rs = User.objects.order_by(‘id’, ‘age’)
将返回来的QuerySet中的Model转换为字典rs = User.objects.all().values()
获取当前查询到的数据的总数rs = User.objects.count()
exact(相当于等号),配合filter使用rs = User.objects.filter(name__exact = ‘bob’)
contains(包含)rs =User.objects.filter(name__contains = ‘bob’)
startswith(以什么开头)rs = User.objects.filter(name__startswith = ‘bob’)
ends(以什么结束)rs = User.objects.filter(name__endswith = ‘bob’)
iexact, icontains, istartswith, iendswith可忽略大小写
in(成员所属)rs = User.objects.filter(age__in = [18, 19, 20])
range(范围),两边均可取到rs = User.objects.filter(age__range(18, 20))
gt(大于), gte(大于等于)rs = User.objects.filter(age__gt = 20)
lt(小于), lte(小于等于)rs = User.objects.filter(age__lt = 20)
isnull(判断是否为空)rs = User.objects.filter(name__isnull = True)
  • 多条件的or连接查询
    案例:查询年龄为18或20的用户
    在这里插入图片描述
  • 聚合与分组
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值