Django

xiaoxiao2021-02-28  41

ORM

ORM全拼 Object-Relation Mapping, 对象-关系映射,主要实现模型对象到关系数据库数据的映射()
ORM图解
# 调用模型类对象的Save()生成 insertupdate语句 # 调用模型类对象的Delete()生成delete语句 # 调用模型类的all()、get()生成select语句 #优点 * 只需要面向对象编程,不需要面向数据库编写代码 - 对数据库的操作都转化成类属性和方法的操作 - 不用编写各种数据库的sql语句 * 实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异 - 不在关注用的是myspl、oracle...等 - 通过简单的配置就可以轻松更换数据库,而不需要修该代码 # 缺点 * 相比较直接使用SQL语句操作数据库,有性能损失 * 根据对象的操作转换成SQL语句,根据查询的结果转化成对象,在映射过程中有性能损失 * 都不写SQL语句了

mysql数据库配置

pip install pymysql # 配置mysql数据库 DATABASES={ # 可配置多个(主从关系) 'default':{ 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'Bookdb', # 数据库名称 'HOST': '192.168.80.132', # 数据库主机 'PORT': '3306', # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'mysql', # 数据库密码 } } # 退出数据库操作 control+d

字段类型

总结语法:属性名 = modles.字段类型(选项) - 定义属性时需要指定字段类型,通过字段类型的参数指定选项 # 属性名 - 不允许使用python的保留关键字 - 不允许使用mysql的保留关键字 - 不允许使用连续的下划线,因为Django的查询语法就是连续的下划线 # 字段类型 ##提示:Django根据属性的类型确定以下信息 - 当前选择的数据库支持字段的类型 - 渲染管理表单时使用的默认html控件 - 在管理站点最低限度的验证 - 使用时需要引入from django.db import models包 AutoField:自动增长的IntegerField,通常不用指定 BooleanField:布尔字段,值为TrueFalse NullBooleanField:支持Null、TrueFalse三种值 CharField(max_length=字符长度): 字符串 TextFiled:大文本字段,一般超过4000个字符时使用 IntegeField: 整数 # 表示总位数 , 表示小数位数 DecimalField(max_digits=None,decimal_places=None):可以指定精度的十进制浮点数 FloatField: 浮点数 #最后一次修改的时间,创建的时间 DateField[auto_now=False,auto_now_add=False]:日期 TimeField:时间,参数同DateField DateTimeField:日期时间,参数同DateField FileField:上传文件字段 ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片 # 选项:通过选项实现对字段的约束 null:如果为True,表示允许为空,默认值是False(针对数据库表里的字段的约束) blank:如果为True,则该字段允许为空白,默认值是False(针对后台站点的表单的约束) db_column:字段的名称,如果未指定,则使用属性的名称 db_index:若值为True, 则在表中会为此字段创建索引,默认值是False default:默认值 primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用 unique:如果为True, 这个字段在表中必须有唯一值,默认值是False # 关系字段类型(三种类型) ForeignKey:一对多,将字段定义在多的一端中 ManyToManField:多对多,将字段定义在任意一端中 OneToOneField:一对一,将字段定义在任意一端中 维护递归的关联关系,使用self指定 # 元选项 - 作用:修改数据库表的默认的名称 - 修改、创建表就要迁移 class Meta: #元信息类 db_table = 'bookinfo' #自定义表的名字

模型成员

# 模型实例方法 str:在将对象转换成字符串时会被调用 save:将模型对象保存到数据库表中 delete:将模型对象从数据库表中删除 # objects模型属性 - objects: 管理器对象 -Manager类型的对象 - 用于模型对象和数据库交互 - 默认自动生成的属性,但是可以自定义管理器对象 - 自定义管理器对象后,Django不再可以自定义管理器对象objects # 管理器类Manager - 定义在from django.db import models中 - 管理器是Django的模型进行数据库操作的接口,Django应用的每个模型都拥有至少一个管理器 - Django模型支持自定义管理器类,继承自models.Manager ## 自定义管理器主要2中情况 1.修改原始查询集,重写get_queryset()方法 - 查询时,如果需要默认过虑掉某些数据,需要修改原始查询集 2.新增管理器方法,如创建模型对象方法. - 当模型属性很多,多数字段默认值,每次只需要给少数属性赋值时,可以新增模型初始化方法 * 注意:不能重写init方法做初始化操作;因为Model本身会在init方法中做默认的初始化操作,如果重写该方法会跟Model默认的冲突

查询操作

查询集:表示从数据库中获取的模型对象集合 # 特点 1.惰性执行:创建查询集不会访问数据库,直到在模板中调用数据时,才会访问数据库 - 调用数据的情况包括迭代、序列化、与if合用 2.缓存:查询集的结果被存下来之后,再次查询相同数据时会使用之前缓存的数据 过滤器:基于所给的参数限制查询的结果 # 返回列表的过滤器 all():返回所有的数据 filter():返回满足条件的数据 exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字 order_by:返回排序后的数据 # 返回单个对象的过滤器 get():返回单个满足条件的对象 count():返回当前查询的总条数 aggregate():聚合 exists():判断查询集中是否有数据,如果有则返回True,没有则返回False 限制查询集 查询集返回列表,可以使用下标的方式进行限制,等同于sql中的limit和offset子句注意:不支持负数索引使用下标后返回一个新的查询集,不会立即执行查询

基础条件查询

语法:filter(模型属性__条件运算符=值)提示:exact(判断相等可以不写直接id=1,id等价于PK)、contains(表示包含,类似like)、starswith(以什么开头)、endswith(以什么结尾)、isnull(是否为空)、in(表示只能在指定的选项中,不表示区间)、gt:大于lt:小于gte:大于等于 lte:小于等于,运算符都区分大小写,在其前加i表示不区分大小写

F和Q对象

# F对象语法 from django.db.models import F F('属性名') # Q对象语法 from django.db.models import Q # 逻辑或 Q(模型属性1_条件运算符=值) | Q(模型属性2_条件运算符=值) # 逻辑非 ~Q(模型属性_条件运算符=值)

聚合函数

使用aggregate()过滤器调用聚合函数,返回单个对象 # 聚合函数包括:Avg, Max, Min, Sum, Count(使用Count一般直接调用)

关联查询

# 基础关联查询 - 一查多:会把多的那个模型类名全部转成小写,再拼接_set # 内连接查询语法 filter(关联模型类名小写_属性名_运算符=值) - 多查一,关联的模型类名小写需要使用外键 # 自关联查询 自关联的表结构:对于地区信息、分类信息等数据,表结构非常类似,每个表的数据量十分有限,为了充分利用数据表的大量数据存储功能,可以可以设计成一张表,内部的关系字段指向本表的主键 说明:关系属性使用self指向本类,要求null和blank允许为空,因为一级数据是没有父级的
转载请注明原文地址: https://www.6miu.com/read-2624359.html

最新回复(0)