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)

最后在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不会对数据库进行读写操作,当调用save()方法时才于数据库进行交互,将对象保存在数据库中
-------------------------------------------------------
在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中数据对象的增删改查常用方法,自定义管理器类,过滤器及F和Q对象等知识点总结相关推荐

  1. java list集合增删改_Java中集合类list的增删改查

    今天给大家带来的是Java中list类的使用,java.util 包提供了list类来对线性数据操作 List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类 ...

  2. 动态网站作业4-JSP中实现数据库的增删改查的操作

    动态网站作业4-JSP中实现数据库的增删改查的操作 用Statement向数据库中添加元素 1.创建JavaBean–UserBean package com.media.bean;public cl ...

  3. JavaScript学习(四十八)—原型对象的增删改查

    JavaScript学习(四十八)-原型对象的增删改查 一.构造方法与原型对象的图解 二.型对象的增删改查 (一).什么是原型 每个函数都会有一个属性--prototype属性,这个属性都会有一个对象 ...

  4. java对数据库的增删改查_在java中对数据库进行增删改查

    代码区域: package com.oracle.jdbc.demo1; import java.sql.Connection; import java.sql.DriverManager; impo ...

  5. python增删改查的框架layui_spring+springMvc+mybatis+layui实现数据表格的增删改查(纯layui实现)...

    [实例简介] 项目描述: 这是通过ssm+layui 实现的简单的对数据表格的增删改查,所有页面纯由layui实现. 如果你是新手学习layui,那这个绝对会对你有很大的帮助: 如果你之前已经学过甚至 ...

  6. 【PostgreSQL】数据表的增删改查

    关于数据库的增删改查可以参考之前的博客 [PostgresSQL]登录数据库(远程).管理数据库(增删改查) 下面是数据表的增删改查 1.增加数据表 # 创建ada_address_pool表 CRE ...

  7. c#web窗体实现对数据库的增删改查,学生管理信息系统~vs2010+access2010

    @TOC解决方案管理器目录结构 c#web窗体实现对数据库的增删改查,学生管理信息系统~vs2010+access2010 以下是web程序课程后做的期末项目,前端以及页面逻辑结构使用vs搭建,后端服 ...

  8. python diango 增删改查_python中关于django对数据库Mysql的增删改查操作详解

    下面小编就为大家带来一篇python django 增删改查操作 数据库Mysql.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 下面介绍一下django增删改查操作: ...

  9. mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)

    Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表 基本结构 from django.db importmodelsclassuserinfo(models ...

最新文章

  1. mysql sql测试_MySQL语句测试——数据查询
  2. F5提高Microsoft SharePoint 2010平台的灵捷 度、性能和安全性
  3. Cenetos 下sudo的使用
  4. JavaScript社区开发者调查:服务端JS盛行 AngularJS使用者最多
  5. 当代最值得收藏的画家作品_欣赏当代知名画家谭日群——国画人物画书法作品欣赏...
  6. 华为云IoT专家直播——构筑智慧路灯实战分享
  7. 【CarMaker学习笔记】申请使用账号
  8. 金蝶K3cloud 7.6注册教程
  9. part2:服务器接收企业微信用户消息
  10. Linux环境安装Postgresql报错。configure: error: zlib library not found
  11. defs(defs是什么意思)
  12. IDEA本地插件下载及安装
  13. U-GAT-IT 论文翻译
  14. CSDN富文本编辑器去除空行
  15. android+双卡imei,以编程方式在Android中为双SIM卡检索IMEI号码
  16. 二维码条形码生成打印软件C#源码,根据变量自动添加抬头
  17. 计算机键盘复制键,键盘按键设置复制粘贴的方法
  18. 【mysql】 踩坑记录之derived(派生表)
  19. win10下完美卸载ubuntu
  20. 在Xml中加注释的方法

热门文章

  1. 线上cpu飙高,死锁查询
  2. 更改ip,修改网卡文件,使用 nmtui命令。
  3. zgrep查看前后几行日志
  4. i.MX6ULL移植NXP官方uboot2020.04_5.4.47_2.2.0
  5. 【BZOJ3771】Triple
  6. 模糊逻辑学习--模糊推理过程
  7. Sugeno型(TS型)模糊推理系统及自适应神经网络的模糊推理系统(anfis)应用
  8. 2023年上半年软考中级数据库系统工程师如何高效备考?难吗?
  9. git在项目中忽略包node_modules依赖包和git 指令常用汇总
  10. R语言数据读取以及数据保存方式