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中数据知识点归纳相关推荐

  1. Django中数据对象的增删改查常用方法,自定义管理器类,过滤器及F和Q对象等知识点总结

    Django对象的增删改查 我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例 定义学生: class Students(models.Model):sname=m ...

  2. 大数据知识点归纳总结

    文章目录 Hadoop 数据采集 Flume 应用架构 安装使用 Kafka Kafka架构 Kafka优点 主要组件 broker topic(主题) partition(分区) offset pr ...

  3. 二级考试c语言中 星号与字母 题型总结,2017年计算机二级考试C语言知识点归纳...

    2017年计算机二级考试C语言知识点归纳 计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,考核计算机基础知 ...

  4. 数据汇总与统计(pandas库)知识点归纳总结及练习题

    统计的基本概念 总体:研究对象的全体–eg:所有学生的身高.成绩和体重等 个体:总体中的每一个成员–eg:单个同学的身高.成绩 样本:从总体中抽出部分个体组成的集合 样本容量:样本中所含个体的数目 常 ...

  5. CCNA 知识点归纳(持续更新中)

    此文为本人在CCNA学习过程中自我总结归纳的知识点 若有不足或错误之处欢迎指正. 文章目录 一.网络互联 1.1 网络互联基础 1.2 OSI参考模型 二.以太网和数据封装 2.1 以太网布线 2.2 ...

  6. 如何在Django中接收JSON格式的数据

    Django做了大量工作简化我们的Web开发工作, 这其中当然也包括接收来自客户端的数据这一普遍需求. 大部分时候,从客户端传入的数据主要是FORM的POST数据,和来自URL的GET数据, 在Dja ...

  7. c语言中小数乘法怎样写程序,四年级下册lbrack;小数乘法rsqb;知识点归纳

    与<四年级下册[小数乘法]知识点归纳>相关的范文 北师大版小学数学一年级(上册)知识点归纳 本册教材的教学内容 1 北师大版一年级数学(下册)知识点 一年级下册知识领域及结构图 一. 生活 ...

  8. java编程中的点_Java的21个技术点和知识点归纳(转)

    1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可.不过对于一个有着3年以上Java经验的资深开发者来说,不 ...

  9. Django中Ajax提交数据的CSRF问题

    错误信息: Forbidden (CSRF token missing or incorrect.): 什么是CSRF: django为用户实现防止跨站请求伪造的功能,通过中间件 django.mid ...

最新文章

  1. 项目:IT资源共享资源(登录前端)1
  2. 软件测试工程师们,今年的年终奖你想拿多少?
  3. 集成开发环境(IDE)
  4. 正式开放 | 阿里云 10 亿级镜像服务正式支持 Helm Charts,云原生交付再加速!
  5. mikrotik ros ***借线
  6. Hbase shell 常用命令
  7. matlab车流量检测,求解释代码,一段交通车流量检测的代码
  8. mfc最详细入门教程
  9. 《大数据分析技术》课程设计
  10. js实现排列组合算法(全排列)
  11. IP地址中的网络地址和主机地址分别是什么意思?
  12. 【LeetCode力扣】青蛙跳台阶问题,一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
  13. js Array 标准方法
  14. 鼠标右键菜单跑到左边改回右边显示
  15. cuda9.0和cudnn7.3 win10百度网盘地址
  16. 2020 中科院 CVPR : Context-Aware Attention Network for Image-Text Retrieval
  17. 社会工程:安全体系中的人性漏洞pdf
  18. 解决bootstrap table刷新加载时白色闪屏问题
  19. 视频素材剪辑制作的方法分享
  20. 解脱的生活——《心经》与人生

热门文章

  1. flashdevelop java_FlashDevelop使用详解教程
  2. vue 调用打印机插件 LODOP 实例详解
  3. 服务器产生大量的TIME_WAIT或者CLOSE_WAIT的原因以及如何解决
  4. Laetus控制器维修20C-A323包装机控制模块
  5. 微信小程序实现轮播图根据图片大小自适应高度
  6. CentOS7 查看系统安装时间、硬盘序列号
  7. linux织梦cms修改权限,dedecms织梦网站目录权限-Centos设置dedecms网站目录权限的方法-吾爱编程网...
  8. 20170601メモbaijiahao
  9. 成人本科2023年报名费是多少钱 什么时候缴费
  10. 上联“今年年尾明年年头年年年尾对年头”,续写下联