Django中数据知识点归纳
Django对象的增删改查
我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例
定义学生:
class Students(models.Model):sname=models.CharField(max_length=20)sgender=models.BooleanField(default=True)sage=models.IntegerField()sscord=models.CharField(max_length=20)isDelete=models.BooleanField(default=False)# 这里可以添加Meta类进行对元类的重命名和排序操作class Meta:db_table=xxx # 定义数据表名,推荐使用小写字母ordering=[] # 对象的默认排序字段 ,获取对象列表时使用,通常是Integer(整数)类型,升序ordering['id'],降序用ordering['-id']
然后在url.py文件中添加一个链接转到views.py文件中:
url(r'^show/',views.show)
接下来在views.py文件中进行具体的增删改查操作
下面是一些例子:
查询:
# 类名.objects.all() #查询所有对象
Students.objects.all()# 类名.object.get('条件') #查询单个对象
Students.object.get(sage=18)# 类名.object.filter.(条件查询) #模糊查询
#查询年龄小于等于18岁的学生信息
Student.objects.filter(age__lte=20).all()
#查询出年龄大于等于18岁的用户信息,但是使用的是exclude函数
Students.objects.exclude(age__gt=18).all()# 查询结果集的数量
Students.objects.all().count()# 判断查询结果集是否有值
Students.objects.all().exists()# 使用切片的形式拿到前几个值
Students.objects.all()[0:3]# 求出年龄大于学分的所有学生信息
# Student.object.filter(sage__gt=F('sscord')).all()# 求出年龄大于20,并且姓名包含e的所有信息
Students.object.filter(sage__gt=20).filter(sname__contains='e').all()
修改:
# 排序 (默认升序,降序的话属性前面加‘-’)
Students.objects.order_by('sage')#修改
得到对应的对象
模型对象.属性=属性值
模型对象.save()
stu=Students.object.get(sage=18)
stu.sage=19
stu.save()
删除:
获得对象名
对象名.delete()
stu = Students.objects.get(pk=1)
stu.delete()
增加:
对象.save
stu=Students()
sname=jeck
sage=18
sscord=60
stu.save()
context = {'stu':stu}
return render(request,'show.html',context=context)或者直接返回
return render(request,'show.html',locals())
最后在show.py文件里展示views.py文件中的内容
show.py:
<ul>{% for i in stu %}<li>{{ i.sname }}</li>{% endfor %}
</ul>
上面只是一些大概的例子,下面进行总结:
--------------------------------------------------------------------------
ORM(Object Relational Mapping)对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
可以简单理解为翻译机,用于django与数据库交互
Django默认通过模型的‘objects’对象实现模型数据查询
Django有两种过滤器用于筛选记录:
filter :返回符合筛选条件的数据集
exclude :返回不符合筛选条件的数据集
多个filter 和 exclude可以连接在一起查询
返回查询集:
all() :返回所有数据
filter() :返回符合条件的数据
exclude():过滤掉符合条件的数据
order_by():排序
values():一条数据就是一个字典,返回一个列表
返回单个数据:
get():返回一个满足条件的对象,没有找到会引发模型类.DoesNotExist异常,找到多个会引发模型类.MultiObjectsReturned异常
first():返回查询集中的第一个对象
last():返回查询集的最后一个对象
count():返回当前查询集中的对象个数
exists():判断查询集中是否有数据,如果有返回True,反之返回False
限制查询集和查询集的缓存:
限制查询集可以使用下标的方法进行限制,等同于sql中的limit
studentList=Students.objects.all()[0:5] #下标不能是负数
查询集的缓存:每个查询集都有一个缓存,来最小化对数据库的访问
在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,django会将查询出来的数据做一个缓存,并返回查询结构,以后查询直接使用查询集的缓存
过滤器filter(),exclude()以及get()的参数:
语法:属性名称_比较运算符=值比较运算符:
exact:判断,大小写敏感, filter(isDelete=False)
contains:是否包含,大小写敏感, filter(sname_contains='赵')
startswith,endswith:以values开头或结尾,大小写敏感
在以上四个运算符前加上i(ignore)就不区分大小写了
isnull,isnotnull:是否为空, filter(sname_isnull=False)
in:是否包含在范围内,filter(pk_in=[1,2,3,4])
gt,gte,lt,lte:大于,大于等于,小于,小于等于, filter(sage_gt=30)表示时间的:
year,month,day,week_day,hour,minute,second:filter(lasttime__year=2017)
pk:代表主键,filter(pk=1)跨关系查询:
模型类名__属性名__比较运算符,实际上就是处理的数据库中的join
grade = Grade.objects.filter(student__scontend__contains='赵钱孙')
描述中带有'赵钱孙'这三个字的数据属于哪个班级聚合函数:
使用aggregate()函数返回聚合函数的值
Avg:平均值
Count:数量
Max:最大
Min:最小
Sum:求和
Student.objects().aggregate(Max('sage'))
F对象:
可以使用模型的A属性与B属性进行比较
grades = Grade.objects.filter(ggirlnum__gt=F('gboynum') )
F对象支持算数运算
grades = Grade.objects.filter(ggirlnum__gt=F('gboynum') +10 )
Q对象:
过滤器的方法中的关键参数,常用于组合条件
年龄小于25
Student.objects.filter(Q(sage__lt=25))
Q对象语法支持 | (or), & (and), ~(取反)
年龄大于等于的
Student.objects.filter(~Q(sage__lt=25))
-------------------------------------------------------
在Django中,我们有些时候使用Django自带的ORM语句无法达到操作数据库的效果,这时,我们可以自定义一个管理器来进行数据库的操作。从总体上来说,就是重写方法和自定义方法
django的隐性属性和显性属性
显性: 自己写的那些
隐性: objects 是一个Manager类型的一个对象,作用于数据库进行交互
自定义模型管理器作用:
可以向管理器中添加额外的方法
修改管理器返回的原始查询集
提供创建对象的方式
不同的操作在不同的类中,如all() 在Manager类,get()在Query类中
一个例子说明自定义管理器类的作用:
通过Student.objects.all() 查询sgender为True的记录class Student(models.Model):sno = models.AutoField(primary_key=True)sname = models.CharField(max_length=30,null=False)sgender = models.BooleanField(default=False)objects = getAllTrue() #创建一个自定义类对象def __str__(self):return "Student:%s--%s"%(self.sname,self.sgender)#自定义管理类
class getAllTrue(models.Manager): #all()来自于Manager类# def all(self): #重写方法# return Manager.all(self).filter(sgender = True) #功能操作def get_queryset(self): # 与all() 方法相同,在源码中,all()执行就是调用get_queryset()方法。return Manager.get_queryset(self).filter(sgender=True)
Django中数据知识点归纳相关推荐
- Django中数据对象的增删改查常用方法,自定义管理器类,过滤器及F和Q对象等知识点总结
Django对象的增删改查 我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例 定义学生: class Students(models.Model):sname=m ...
- 大数据知识点归纳总结
文章目录 Hadoop 数据采集 Flume 应用架构 安装使用 Kafka Kafka架构 Kafka优点 主要组件 broker topic(主题) partition(分区) offset pr ...
- 二级考试c语言中 星号与字母 题型总结,2017年计算机二级考试C语言知识点归纳...
2017年计算机二级考试C语言知识点归纳 计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,考核计算机基础知 ...
- 数据汇总与统计(pandas库)知识点归纳总结及练习题
统计的基本概念 总体:研究对象的全体–eg:所有学生的身高.成绩和体重等 个体:总体中的每一个成员–eg:单个同学的身高.成绩 样本:从总体中抽出部分个体组成的集合 样本容量:样本中所含个体的数目 常 ...
- CCNA 知识点归纳(持续更新中)
此文为本人在CCNA学习过程中自我总结归纳的知识点 若有不足或错误之处欢迎指正. 文章目录 一.网络互联 1.1 网络互联基础 1.2 OSI参考模型 二.以太网和数据封装 2.1 以太网布线 2.2 ...
- 如何在Django中接收JSON格式的数据
Django做了大量工作简化我们的Web开发工作, 这其中当然也包括接收来自客户端的数据这一普遍需求. 大部分时候,从客户端传入的数据主要是FORM的POST数据,和来自URL的GET数据, 在Dja ...
- c语言中小数乘法怎样写程序,四年级下册lbrack;小数乘法rsqb;知识点归纳
与<四年级下册[小数乘法]知识点归纳>相关的范文 北师大版小学数学一年级(上册)知识点归纳 本册教材的教学内容 1 北师大版一年级数学(下册)知识点 一年级下册知识领域及结构图 一. 生活 ...
- java编程中的点_Java的21个技术点和知识点归纳(转)
1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可.不过对于一个有着3年以上Java经验的资深开发者来说,不 ...
- Django中Ajax提交数据的CSRF问题
错误信息: Forbidden (CSRF token missing or incorrect.): 什么是CSRF: django为用户实现防止跨站请求伪造的功能,通过中间件 django.mid ...
最新文章
- 项目:IT资源共享资源(登录前端)1
- 软件测试工程师们,今年的年终奖你想拿多少?
- 集成开发环境(IDE)
- 正式开放 | 阿里云 10 亿级镜像服务正式支持 Helm Charts,云原生交付再加速!
- mikrotik ros ***借线
- Hbase shell 常用命令
- matlab车流量检测,求解释代码,一段交通车流量检测的代码
- mfc最详细入门教程
- 《大数据分析技术》课程设计
- js实现排列组合算法(全排列)
- IP地址中的网络地址和主机地址分别是什么意思?
- 【LeetCode力扣】青蛙跳台阶问题,一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
- js Array 标准方法
- 鼠标右键菜单跑到左边改回右边显示
- cuda9.0和cudnn7.3 win10百度网盘地址
- 2020 中科院 CVPR : Context-Aware Attention Network for Image-Text Retrieval
- 社会工程:安全体系中的人性漏洞pdf
- 解决bootstrap table刷新加载时白色闪屏问题
- 视频素材剪辑制作的方法分享
- 解脱的生活——《心经》与人生
热门文章
- flashdevelop java_FlashDevelop使用详解教程
- vue 调用打印机插件 LODOP 实例详解
- 服务器产生大量的TIME_WAIT或者CLOSE_WAIT的原因以及如何解决
- Laetus控制器维修20C-A323包装机控制模块
- 微信小程序实现轮播图根据图片大小自适应高度
- CentOS7 查看系统安装时间、硬盘序列号
- linux织梦cms修改权限,dedecms织梦网站目录权限-Centos设置dedecms网站目录权限的方法-吾爱编程网...
- 20170601メモbaijiahao
- 成人本科2023年报名费是多少钱 什么时候缴费
- 上联“今年年尾明年年头年年年尾对年头”,续写下联