加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Django 内嵌的 ORM 模型

发布时间:2023-07-05 13:26:19 所属栏目:教程 来源:
导读:本小节将详细为大家介绍 Django 中内嵌的 ORM 模型及其使用,这里我会结合源码的方式为大家展示 Django 内部 ORM 模型的实现原理。

ORM 的概念如下:

对象关系映射(Object Relational Mapping,简称ORM)模式
本小节将详细为大家介绍 Django 中内嵌的 ORM 模型及其使用,这里我会结合源码的方式为大家展示 Django 内部 ORM 模型的实现原理。

ORM 的概念如下:

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

简单的说,ORM 是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。ORM 解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段,具体如下图所示。ORM 提供了对数据库的映射,不用直接编写 sql 代码,只需像操作对象一样从数据库操作数据。让软件开发人员专注于业务逻辑的处理,提高了开发效率。

ORM 模式也是有一定缺点的,它会在一定程度上牺牲程序的执行效率。此外,还存在许多复杂场景是 ORM 模式无法解决的,同样还是需要手动编写 sql 语句完成。

Django 中常用的 Field types

在 Django 模型中,每个字段都应该是相应 Field 类的实例,以此决定该表在数据库中保存字段的数据类型。在上面的源码中我们看到 Django 内部是定义了25个字段类,其中常用的 Field 类型如下:

AutoField:int 自增列,必须填入参数 primary_key=True。当 model 中如果没有自增列,则自动会创建一个列名为 id 的列;

BooleanField:布尔类型 (True/False),这个Field不接受null参数,要想使用可以为 null 的布尔类型的字段,就要使用 NullBooleanField;

CharField:最常用的字段类,映射到数据库中会转换成 varchar 类型,使用时必须传入 max_length 属性以定义该字符串的最大长度,如果超过254个字符,就不建议使用 CharField 了,此时建议使用 TextField;

DateField 和 DateTimeField:都是日期时间的字段类,注意前者只到天,后者可以精确到毫秒。使用这两个 Field 可以传递以下几个参数:

此外要注意的是 auto_add_Now,auto_Now 与 default 是互斥的。

auto_Now=True:在每次这个数据保存的时候,都使用当前的时间;

auto_Now_add=True:在每条数据第一次被添加进去的时候,都使用当前的时间;

DecimalField:处理浮点类型的 Field。从上面的源码可以看到,它有两个必须填入的参数:

max_digits:数字允许的最大位数;

decimal_places:小数的最大位数;

FloatField:也是处理浮点类型的 Field。它和 DecimalField 的区别就是 Python 中 float 和 decimal 的区别;

IntegerField /BigIntegerField/SmallIntegerField:都是处理整数类型的 Field;

TextField:长文本类型 Field,对应 MysqL 中的 longtext 类型。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章