初识Django之模型Model
Django 模型
Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。
Django ORM
对象关系映射
(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
使用 ORM 的好处
- 提高开发效率。
- 不同数据库可以平滑切换。
使用 ORM 的缺点
- ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
- 长期写 ORM 代码,会降低编写 SQL 语句的能力。哈哈,我自己SQL能力不强。
ORM 解析过程
- ORM 会将 Python 代码转成为 SQL 语句。
- SQL 语句通过 pymysql 传送到数据库服务端。
- 在数据库中执行 SQL 语句并将结果返回。
数据库配置
创建 MySQL 数据库( ORM 无法操作到数据库级别,只能操作到数据表)
create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8
修改项目的 settings.py 文件中找到 DATABASES 配置项
1
2
3
4
5
6
7
8
9
10
11DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'name', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}使用 pymysql 模块连接 mysql 数据库
1
2
3# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()
Model => DB
- 生成迁移文件
python manage.py makemigrations
- 执行迁移
python manage.py migrate
DB => Model
- 直接生成Model
python manage.py inspectdb -> models.py
- 生成的Model 拥有元信息 manage=False 不需要迁移系统管理
模型关系
1:1
1 | class Person(models.Model): |
- OneToOneField
- 确定主从关系
- 底层实现 —–> 从表中声明外键并添加唯一约束
- 从获取主:显性属性
主获取从:隐性属性,默认就是表模型名小写 - 从表删除数据:主表不受影响
主表删除数据:
1:M
1 | class Grade(models.Model): |
- 直接使用外键实现 - ForeignKey
- 主从获取
M:N
1 | class Customer(models.Model): |
- ManyToManyField, 两张以上的表的对应关系。
- 会产生额外的关系表,表中使用多个外键实现,外键对应关系表的主键。
- 主从获取
模型继承
- Django中模型支持继承
- 默认继承是会将通用字段放到父表中,特定字段放在自己的表中,中间使用外键链接
- 关系型数据库关系越复杂,效率越低,查询越慢
- 父类表中也会存储过多的数据
- 使用元信息解决问题
- 使模型抽象化
- 抽象的模型就不会在数据库中产生映射
- 子模型映射表中直接包含父模型的字段
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 随心所欲录!
评论