django 过滤器-查询集-比较运算符-FQ对象-mysql的命令窗口
""" 返回查询集的方法称为过滤器 all() 返回查询集中所有数据 filter() 返回符合条件的数据 一、filter(键=值) 二、filter(键=值,键=值) #两个关系为and 三、filter(键=值).filter(键=值) #两个关系为and exclude()过滤掉符合逻辑的数据 order_by()排序 values()一条数据就是一个对象{字典},返回一个列表返回单个数据: get() 返回一个满足条件的对象 注意:如果没有找到符合条件对象,会引发“模型类.DoesNotExist异常”如果找到多个对象,也会引发“模型类.MultipleObjectsReturnen异常" count() 返回查询集中的对象个数 first() 返回查询集中的第一个对象 last() 返回查询集中的最后一个对象 exists() 判断查询集中是否有数据,如果有返回True,没有返回False限制查询集 返回列表,可以使用下标的方法进行限制,注意下标不能是负数 students_list = Students.stuobj.all()[0:5] 这个是显示5条记录 下面是分页显示5条记录 #0-5 6-10 # 1 2 page = int(page) students_list = Students.stuobj.all()[(page-1)*5:page*5]查询集的缓存 概述:每个查询集都包含一个缓存,来最小化对数据加访问在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,django会将查询出来的数据做一个缓存,并返回查询结构,以后查询的直接查询查询集的缓存字段查询 概述 1.实现了SQL中的WHERE语句,作为方法filter(),exclude(),get()参数 2.语法:属性名称__比较运算符=值 3.外键:属性名_id 4.转义:like语句在SQL中使用%是为了匹配点位,匹配数据中的%(where like ‘\%‘) filter(sanme__contains‘%‘)比较运算符: exact:判断,大小写区分,例:filter(isdelete=Flase) contains:包含,大小写区分,例:students_list=Students.stuobj.filter(sname__contains="小") startswith和endswith:以values开头或者结尾的查询,大小写区分,例:students_list=Students.stuobj.filter(sname__startswith="小") 以上四个开头加上i,就不区分大小写,iexact,icontains,istartswiht,iendswith isnull,isnotnull:是否为空的意思,例:filter(sname_isnull=False) in:是否包含在范围内,例:students_list=Students.stuobj.filter(pk__in=[2,4,6]) gt,gte,it,ite:分别为,大于,大于等于,小于,小于等于,例:students_list=Students.stuobj.filter(sage__gt=30) year,month,day,week_day,hour,minute,second:日期筛选,例:students_list=Students.stuobj.filter(latetime__year=2017)跨关联查询: 处理join查询,语法:模型类名__属性名__比较运算符 描述中带有"小李"这两个字的数据是属于那个班级的 students_list = Grades.gra_guanli.filter(students__scontend__contains=‘小李‘) print(students_list)查询快捷: pk --- 代表主键聚合函数: 使用aggregate()函数返回聚合函数的值 Aug Count Max Min Sum 使用时候,需要先引入,例,取最大的年龄: from django.db.models import Max studentAge = Students.stuobj.aggregate(Max(‘sage‘)) print studentAge 打印结果:{‘sage__max‘: 34} #是个字典F对象: 可以使用模型A属性与B属性进行比较 也是需要先引入 from django.db.models import F def grades3(request):g = Grades.gra_guanli.filter(ggirlnum__gt=F(‘gboynum‘))print(g)return HttpResponse("kkk") 支持F对象的算术运算g = Grades.gra_guanli.filter(ggirlnum__gt=F(‘gboynum‘)+20)Q对象: 概述:过滤器的方法中的关键字参数,条件为AND模式 需求:进行or查询 解决:使用Q对象,这个是或的关系,只两个条件有一个符合都会显示 from django.db.models import Q def studentsearch(request):g = Students.stuobj.filter(Q(pk__gt=7) | Q(sage__gt=30))print (g)return HttpResponse(‘jj‘) 如果只有一个Q对象,就是用于匹配 g = Students.stuobj.filter(Q(pk__gt=7)) 如果Q对象前面再个波浪线,就是用于取反 g = Students.stuobj.filter(~Q(pk__gt=7))如果更改django的代码,终端需要重新进入,并重新加载下面,终端区分大小写from xinapp.models import Grades,Students from django.utils import timezone from datetime import *查所有数据 类名.objects.all()给表传数据 grade1 = Grades() grade1.gname = "pingguo" grade1.gdate = datetime(year=2017,month=7,day=17) grade1.ggirlnum = 8 grade1.gboynum = 30 grade1.save() .....查询数据某一个数据 类名.objects.get(pk=num) Grades.objects.get(pk = 2) #相当于id = 2修改某一个表的数据 模型对象.属性=新值 grade1.gboynum =80 grade1.save()删除某个表的数据 模型对象.delete() 物理删除(数据库中表的数据真实被删除) grade2.delete()关联外键(注意,表中的字段都必须赋值才能正常保存,否则会出错) grade1 = Grades() grade1.gname = "ceshi" stu = Students() stu.sname = "ksjdfk" stu.models.ForeignKey = grade1获取班级关联的学生 模型对象名.关联的类名小写_set.all() grade1.students_set.all()通过关联直接创建学生(如果中文需要转码u‘中文‘,英文不用,它会直接存入数据库,不需要使用save()) 并且直接属于grade1的学生! stu3 = grade1.students_set.create(sname=u‘曾志伟‘,sgender=True,scontend=‘shuoming‘,sage=77)启动服务器 python manage.py runservermysql的命令窗口,这个是没有区分大不小写的删除除数据库 drop database 表名; 数据库名 创建数据库 create database 表名; 数据库名 展示所有数据库名称 show databases; 使用数据库 use 数据名; 展示数据库下面的所有表名称 show tables; 展示表的所有字段结构 desc 项目_表名 查询表的具体的内容 select * from 表名(例:xinapp_grades);django中数据库基本操作: 1.同步数据库 python manage.py makemigrations #生成migrations python manage.py migrate #应用migrations 2.增 Model.objects.create(**kwargs) 3.查 Model.objects.all() 4.改 m = Model.objects.get(id=1) m.name = ‘new_name‘ m.save() 5.删 m = Model.objects.get(id=1) m.delete() 3.数据库的基本操作 3.1 增 我们先为shopping mall增加一个化妆品区: 复制代码 from django.shortcuts import HttpResponse from .models import Area def add_area(request):area = Area.objects.create(name=‘cosmetic‘, description=‘充满香味儿的区域‘)return HttpResponse(‘added!‘) 复制代码 其中,第六行代码 area = Area.objects.create(name=‘cosmetic‘, description=‘充满香味儿的区域‘)所对应的mysql语句为:insert into shop_area(name,description) values(‘cosmetic‘,‘充满香味儿的区域‘); 3.2 查现在,我们来列出shopping mall中的所有区域:复制代码 1 from django.shortcuts import HttpResponse 2 from .models import Area 3 4 5 def list_area(request): 6 area = Area.objects.all() 7 print(area) # 在shell输出[<Area: ‘cosmetic‘>],如果没有定义__str__(),将输出无意义的[<Area: Area object>] 8 9 return HttpResponse(‘listed!‘) 复制代码 第六行代码 area = Area.objects.all()相当于mysql语句:select * from shop_area; 复习一下:shop_area为django为模型自动生成的表名(app_model) 3.3 改 在3.1中,我们并没有为化妆品区指定管理人员。现在,我们修改化妆品区的信息,将rinka指定为管理人员。首先,我们要创建一个rinka用户。这里我将创建一个名为rinka的superuser:python manage.py createsuperuser接着,将我们创建的rinka用户指定为化妆品区的管理人员:复制代码1 from django.shortcuts import HttpResponse2 from .models import Area3 from django.contrib.auth.models import User456 def update_area(request):7 rinka = User.objects.get(username=‘rinka‘)8 area = Area.objects.get(id=1)9 area.manager = rinka 10 area.save() 11 12 return HttpResponse(‘updated!‘) 复制代码 注意必须调用对象的save()方法,对对象实例的修改才会保存到数据库中去。这是一个容易出错的地方。第8~10行代码对应的mysql语句为:update shop_area set manager_id=1 where id=1; 复习一下:manager_id为django默认为外键生成的列名(foreignkey_id) 3.4删删除操作很简单,我们现在来删除数据库表shop_area中id为1的那行数据: 复制代码 1 from django.shortcuts import HttpResponse 2 from .models import Area 3 4 5 def delete_area(request): 6 area = Area.objects.get(id=1) 7 area.delete() 8 9 return HttpResponse(‘deleted!‘) 复制代码 第6~7行语句对应的mysql语句为: delete from shop_area where id=1;模型类中定元选项(Meta类): db_talbe 定义数据表名,如果不定义, 默认是项目名小写_类名小写 ordering 取数据时显示的顺充 正数为顺序,前面加负号为反序,排序会增加数据库资源class Meta:db_table="students"ordering=["-id"]"""
django 过滤器-查询集-比较运算符-FQ对象-mysql的命令窗口相关推荐
- 【django】查询集QuerySet
一.概念 Django的ORM中存在 查询集 的概念. 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调⽤如下过滤器⽅法时,Django会返回查询集(⽽不是简单的列表): ...
- Django框架——查询集QuerySet
目录 1.概念 2.两大特性 (1)惰性执行: (2)缓存: 3.限制查询集 1.概念 Django的ORM中存在查询集的概念. 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合 ...
- python django orm查询集总结
1 .什么是ORM (Object Relational Mapping ) 它的作用是在关系型数据库和业务实体对象做一个映射,我们在操作具体业务对象的时候就可以省去了和SQL语句打交道,只需要简单的 ...
- Django学习笔记(3):使用模型类进行查询(查询函数、F对象、Q对象、聚合函数、查询集、模型类关系、关联查询、自关联、管理器)
文章目录 1.查询函数 2.F对象 3.Q对象 4.聚合函数 5.Count函数 6.查询集 查询集的特性 对查询集进行切片 判断一个查询集中是否有数据 7.模型类之间的关系 一对多关系 多对多关系 ...
- sql server限制查询条数_18. Django 2.1.7 查询集 QuerySet
上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象.Q对象.聚合查询等功能. 不管什么查询,返回的结果都基本是查询集QuerySet,如 ...
- Django框架(13.Django中的查询集)
查询集 在使用Django中的模型类查询函数:all, filter, exclude, order_by调用这些函数会产生一个查询集,QuerySet类对象可以继续调用上面的所有函数. 查询集特性 ...
- python遍历queryset_Django QuerySet查询集原理及代码实例
一 概念 Django的ORM中存在查询集的概念. 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): a ...
- django查询集-17
当查询结果是多个的时候,django-ORM会返回一个 查询集(QuerySet) ,表示从数据库中获取对象的 集合 . 查询集可以使用过滤器进行再次处理. 例如查询阅读量大于20且评论数大于30的书 ...
- django 两个查询集(querySet)的并集和交集
一.获取两个同一模型下查询集queryset的并集使用 | 和union方法 # 获取同一模型下两个查询集的并集# 解决代码如下:records = query1 | query2# 如果不想拥有重复 ...
- 【Django入门】——查询集QuerySet介绍
文章目录 1. 懒惰查询 2. 查询缓存 3. 查询切片 4. 判断有无 在文章[Django入门]--通过模型类查询MySQL数据库基本操作中,我们知道函数all().filter().exclud ...
最新文章
- 千兆路由器怎么设置网速最快_200M的网速,换成千兆路由器,我得到了什么?...
- Spring IO platform
- OPTEE之安全存储详解
- ES5(一)——保护对象
- HTML实现选择数据库字段,django项目中在后台获取了数据库的某一列,如何将其显示在html模板中的select标签内的option选项下?...
- Appfuse:扩展自己的GenericManager
- Mysql中contact、group_concat、concat_ws、repeat
- Js中的window.parent ,window.top,window.self详解
- 零基础Java学习路线
- python列表元素可以重复吗_Python列表中的元素重复
- 64位电脑安装32位系统不能引导启动
- macOS 10.13 High Sierra的新增功能,现已上市
- 大学英语精读第三版(第三册)学习笔记(原文及全文翻译)——8B - Dreams — What Do They Mean?(梦意味着什么?)
- VMware虚拟机 之 VMX进程已提前退出
- 线性规划单纯形法python实现与代码详细解读
- Springboot - retry机制简介以及踩过的坑
- [EGNN] Exploiting Edge Features for Graph Neural Networks 利用图神经网络的边特征 论文详解 CVPR 2019
- solaris 安全设置
- Monitor(管程)是什么意思?Java中Monitor(管程)的介绍
- 从零开始的Android:Android应用程序开发概述
热门文章
- OPENGL中GLAD的代码实现过程
- 8086/8088寻址方式
- L1-039 古风排版 (20 分)(二维数组)
- c4d快速启动语言对话框脚本错误,如何解决“当前页面脚本发生错误”的问题
- wamp mysql 密码_WAMP中的mysql设置密码
- Artifact xxx:war exploded: Error during artifact deployment. See server log for details.
- Confluence导出PDF文件乱码
- 4本图神经网络中文书籍的比较
- nfs总结之生产实例
- 抛硬币概率公式 计算机题,抛币概率公式及其求解实例