vdjangoDjango

Django ORM详解

2018-04-26  本文已影响0人  扯扯_2c79

Django ORM详解

什么是ORM?

ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。

图解:

ORM图解

相信学过linux运维,或者做运维的小伙伴都知道,在linux系统中有一个叫做 VFS(虚拟文件系统)的东西,VFS 是干什么用的呢? VFS就是为不同的文件系统提供了一个统一的操作界面和应用编程接口。我个人觉得这里的ORM类似于VFS,至少处理问题的方式是类似的。

ORM中操作数据库

本质上来说ORM操作数据库也不过是进行CRUD的操作。只是在ORM中将原生的SQL语句都封装成了方法或者函数,方便我们快捷调用。下面来详细介绍这些方法或函数:

1)模型成员objects

Django默认通过模型的objects对象实现模型数据查询

2)数据查询和过滤

过滤实际上就相当于SQL语句中的where语句,和过滤相关的方法或函数如下:

  1. 限制查询结果的条数

限制结果的条数,类似于SQL中的limit和offset。在ORM中则是使用下标的方式去限制,这里有点类似于 python 中列表的下标运算,只是这里的下标不能为负数。

如:模型名.objects.all()[0:5]

4)ORM中的模糊查询

示例:

查询姓王的数据
stus = Student.objects.filter(stu_name__startswith='王')
查询以什么结束的数据:
stus = Student.objects.filter(stu_name__endswith='胖')
查询姓名中包含大的数据
stus = Student.objects.filter(stu_name__contains='大')

5)ORM中的比较运算符

6)聚合函数

与SQL中的聚合函数一样,只是ORM中药通过ggregate()函数获得聚合函数的返回值。

例如: Student.objects.aggregate(Max('age'))

7)F对象和Q对象

导入F对象和Q对象: from django.db.models import F, Q

例如:查找语文成绩比数学成绩至少高10分的学生:

stus = Student.objects.filter(stu_yuwen__gte=F('stu_shuxue') + 10)

例如:查询学生姓名不叫王大锤的,或者语文成绩大于80分的学生

stus = Student.objects.filter(~Q(stu_name='王大锤') | Q(stu_yuwen__gt=80))

注意:Q()对象的前面使用字符“~”来代表意义“非”

模型字段定义

定义属性时,需要字段类型,字段类型被定义在django.db.models.fields目录下,为了方便使用,被导入到django.db.models中,所以在定义属性时要导入库,并通过models去定义属性。

导入库:APP目录下的models.py文件中

from django.db import models

定义属性:

class Student(models.Model):
    stu_name = models.CharField(max_length=10)
属性命名规则
字段类型

说明:该字段默认对应的表单控件是一个TextInput. 在管理员站点添加了一个JavaScript写的日历控件,和一个“Today"的快捷按钮,包含了一个额外的invalid_date错误消息键。

注意:auto_now_add, auto_now, and default 这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果。

字段选项

概述

通过字段选项,可以实现对字段的约束,在字段对象时通过关键字参数指定.

注意: null 是数据库范畴的概念,blank 是表单验证证范畴的

django会为表增加自动增长的主键列(ID),每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列。

补充

逻辑删除

对公司来说最重要的就是数据,删除数据的操作都是不可恢复的。所以在实际开发可能会对不需要的书进行删除,这种情况我们通常都是对数据做逻辑删除,不做物理删除,防止删除数据后,某些时候又需要该数据不能找回。那么什么是逻辑删除呢?逻辑删除就是在数据表中创建一个字段,这个字段通常是BooleanField,用True表示该数据有效,用False表示该数据无效被删除了。

上一篇 下一篇

猜你喜欢

热点阅读