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 runserver mysql的命令窗口,这个是没有区分大不小写的 删除除数据库
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 HttpResponse
2 from .models import Area
3 from django.contrib.auth.models import User
4
5
6 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的查询集
查询集表示从数据库中获取的对象集合,在管理器上调用某些过滤器方法会返回查询集,查询集可以含有零个.一个或多个过滤器.过滤器基于所给的参数限制查询的结果,从Sql的角度,查询集和select语句等价,过 ...
- Django框架(六):模型(二) 字段查询、查询集
1. 字段查询 通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询. 函数名 功能 返回值 说明 get 返回表中满足条件的一条且只能有一条数据. 返回值是一个模型类对象. ...
- 查询集API -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- Django 聚合与查询集API实现侧边栏
本文从Django官方文档总结而来,将聚合的主要用法和查询集的常见方法做一归纳. 聚合 1. 聚合的产生来源于django数据库查询,通常我们使用django查询来完成增删查改,但是有时候需要更复杂的 ...
- Django 查询集简述
通过模型中的管理器构造一个查询集(QuerySet),来从数据库中获取对象.查询集表示从数据库中取出来的对象的集合.它可以含有零个.一个或者多个过滤器.过滤器基于所给的参数限制查询的结果. 从SQL ...
- django查询集API
本节将详细介绍查询集的API,它建立在下面的模型基础上,与上一节的模型相同: from django.db import models class Blog(models.Model): name = ...
- django查询集-17
当查询结果是多个的时候,django-ORM会返回一个 查询集(QuerySet) ,表示从数据库中获取对象的 集合 . 查询集可以使用过滤器进行再次处理. 例如查询阅读量大于20且评论数大于30的书 ...
- Flask入门数据库的查询集与过滤器(十一)
1 查询集 : 指数据查询的集合 原始查询集: 不经过任何过滤返回的结果为原始查询集 数据查询集: 将原始查询集经过条件的筛选最终返回的结果 查询过滤器: 过滤器 功能 cls.query.filte ...
- django 查询集 API
filter 表示=, 返回一个新的QuerySet,包含与给定的查询参数匹配的对象.exclude 表示!=. 返回一个新的QuerySet,它包含不满足给定的查找参数的对象. annotate 使 ...
随机推荐
- Azure Cognitive Services- Speech To Text
Speech 服务是认知服务的一种,提供了语音转文本,文本转语音, 语音翻译等,今天我们实战的是语音转文本(Speech To Text). STT支持两种访问方式,1.是SDK,2.是REST AP ...
- Redis详解(四)——删除策略
Redis详解(四)--删除策略 Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令来获取其状态,当 key 不存在时,返回 -2 . 当 k ...
- uniapp 小程序 flex布局 v-for 4栏展示
注:本项目的图片资源来源于后端接口,所以使用的是v-for. 关键词:uniapp 小程序 flex布局 v-for 4栏展示 自适应 <view style="display: fl ...
- P1049 数列的片段和
P1049 数列的片段和 转跳点:
- Python基础笔记:函数式编程:高阶函数、返回函数、匿名函数
高阶函数 高阶函数:一个函数可以接收另一个函数作为参数 或 一个函数可以返回一个函数作为返回值,这种函数称之为高阶函数. #函数 add 接收 f 函数作为参数 >>> def ad ...
- C#中类的字段或属性不被序列化成JSON或XML
将一个类序列化成JSON或XML时,如果某个字段或属性不想被序列化,则可以使用以下Attribute: 1.[Newtonsoft.Json.JsonIgnore]特性:使用Newtonsoft.Js ...
- 留学生如何把控好Essay写作结构
留学生在国内写过作文,但是对于essay写作到底了解多少呢?大家觉得essay写作太难是语言问题,但是大家要明白,老师对于内容的考察远重于对语言的考察.同学们的essay写作如果能做到言之有理,自圆其 ...
- 干货分享:Research Essay写作规范详解
同学们在刚到国外时觉得一切都很新鲜,感觉到处都在吸引着他们,但是大部分留学生在刚碰到Research Essay便是一头包.其实Research Essay也没有想象中的那么难,只是留学生们初次接触, ...
- Flink 复杂事物处理
简介 FlinkCEP是在Flink之上实现的复杂事件处理(CEP)库. 它允许你在无界的事件流中检测事件模式,让你有机会掌握数据中重要的事项. Flink CEP 首先需要用户创建定义一个个patt ...
- 实验吧-web-天下武功唯快不破(Python中byte和str的转换)
题目:看看响应头 打开网站,既然已经提示我们看响应头了,那我们就看看呗(习惯bp,也可直接F12查看) 可以看到,响应头部分有个FLAG,而且有提示:please post what you find ...