05.30学习总结 | 您所在的位置:网站首页 › 捞月狗数据查询 › 05.30学习总结 |
ORM 查询操作
django数据库查询
数据库的查询需要使用管理器对象进行 通过MyModel.objects 管理器方法调用查询方法 all()MyModel.objects.all() 查询MyModel实体中的所有数据 等同于 select * from table; 返回结果QuerySet容器对象 values(‘列1’,‘列2’…)MyModel.objects.values(…) 查询部分列的数据并返回 等同于 select ‘列1’,'列2 from table; 返回结果QuerySet容器对象,容器内存字典,每个字典代表一条数据 values_list(‘列1’,‘列2’…)MyModel.objects.values_list(…) 查询部分列的数据并返回 等同于 select ‘列1’,'列2 from table; 返回结果QuerySet容器对象,内部存放元组 order_by()MyModel.objects.order_by(‘-列’,‘列’) 会用sql语句的ORDER BY 子查询结果进行根据某个字段选择性的进行排序 默认是按照升序排序,降序排序需要在列前增加’-'表示 filter(条件)MyModel.objects.filter(属性1=值1,属性2=值2) 返回包含此条件的全部的数据集合 返回值 QuerySet容器对象,内部存放MyModel实例 多个属性在一起时为“与”关系 exclude(条件)MyModel.objects.exclude(条件) 返回不包含此条件的全部的数据集 返回值 QuerySet容器对象,内部存放MyModel实例 get(条件)MyModel.objects.get(条件) 返回满足条件的唯一一条数据 该方法只能返回一条数据查询结果多余一条数据则抛出异常;查询结果如果没有数据则抛出异常 查询谓词定义:更灵活的前进查询时需要使用查询谓词 每个查询谓词是一个独立的查询功能,查询谓词都是双下划线开始 __exact:等值匹配 例:Author.objects.filter(id__exact=1) 查询id=1的数据 __contains:包含指定值 例:Author.objects.filter(name__contains=‘w’) sql语句 like ‘%w%’ __startswith:以XXX开始 __endswith:以XXX结束 __gt:大于指定值 Author.objects.filter(age__gt=50) __gte:大于等于 __lt:小于 __lte:小于等于 __in:查找数据是否在指定范围内 Author.objects.filter(name__in=[‘li’,‘wang’,‘hahh’]) __range:查找数据是否在指定的区间范围内 Author.objects.filter(age__range=(1,100)) ORM的更新操作 单个数据修改1.查 通过get()得到要修改的实体对象 2.改 通过对象.属性的方式修改数据 3.保存 对象.save()保存数据 t1 = TestObj.object.get(id=1) t1.name = 'hahaha' t1.save() 批量数据更新直接使用QuerySet的update(属性=值)实现批量修改 #将id大于3的物品价格改为15元 t2 = TestObj.object.filter(id__gt=2) t2.update(price=15) ORM的删除操作实际业务中不会轻易对数据真正删除,一般都是进行伪删除,数据表中添加is_active布尔型字段,默认true,删除操作则将true–>false 单个数据删除1.查找查询结果对应的一个数据对象 2.调用这个数据对象的delete()方法实现删除 try: t1 = TestObj.object.get(id=1) t1.delete() except: print('删除失败') 批量数据删除1.查找查询结果集中满足条件的全部QuerySet查询集合对象 2.调用查询集合对象的delete()方法实现删除 #删除表中物品价格大于10元的全部信息 goods = TestObj.object.filter(price__gt=10) goods.delete() F对象和Q对象 F对象一个F对象代表数据库中某条记录的字段信息 作用(方便处理资源竞争问题) 通常是对数据库中的字段值在不获取的情况下进行操作 用于类属性之间的比较 from django.db.models import F F('列名') Q对象当在获取查询结果集使用复杂的逻辑或 | 、逻辑非~时操作可以借用Q对象进行操作 from django.db.models import Q #找出价格低于20或名字叫hahaha的物品 testObj.objects.filter(Q(price__lt=20)|Q(name='hahaha')) Q(条件1)|Q(条件2) #条件1成立或条件2成立 Q(条件1)&Q(条件2) #条件1成立和条件2同时成立 Q(条件1)&~Q(条件2) #条件1成立且条件2不成立 ORM聚合查询聚合查询是指对一个数据表中的一个字段的数据进行部分或全部进行统计查询 整表聚合聚合函数 sum avg count max min 语法:MyModel.objects.aggregate(结果变量名=聚合函数(‘列’)) 返回结果:结果变量名和值组成的字典 格式为:{‘结果变量名’:值} 分组聚合通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值,即为查询集合的每一项生成聚合 语法:QuerySet.annotate(结果变量名=聚合函数(‘列’)) 返回值:QuerySet |
CopyRight 2018-2019 实验室设备网 版权所有 |