什么是模型
- 模型是一个Python类,即class,它由
django.db.models.Model
所派生出来的子类 - 一个模型类即代表了数据库中的一张数据表
- 模型类的每一个类属性都代表数据表中的一个字段
- 模型是数据交互的接口,是表示和操作数据库的方法和方式
ORM框架
定义
ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,允许使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库。
作用
- 建立模型类与表之间的对应关系,允许我们通过面向对象的方式来操作数据库;
- 根据设计的模型类生成数据库中的表格;
- 通过简单的配置即可实现数据库的切换。
优势
只需要面向对象编程,不需要面向数据库编写代码
- 对数据库的操作都转化成了对类属性和方法的操作;
- 不用编写各种数据库的SQL语句。
实现数据模型和数据库间的解耦,屏蔽了不同数据库操作上的差异
- 不用关注如MySQL, Oracle等数据库的内部细节差异;
- 通过简单的配置即可轻松更换数据库(修改引擎),不需要修改代码。
劣势
- 对于复杂业务的使用成本较高;
- 本质是根据对象的操作转换成SQL语句,再根据查询的结果转换成对象,在映射过程中会有性能损失。
映射关系
ORM | DB |
---|---|
类 | 数据表 |
对象 | 数据行 |
属性 | 字段 |
数据库迁移
迁移是指Django将模型所做的更改(添加字段,删除模型等)同步到数据库模式的方式,其操作步骤如下:
- 生成迁移文件,使用
py manage.py makemigrations
将应用下的models.py文件生成一个中间文件,并保存在migrations文件夹下 - 执行迁移程序,使用
py manage.py migrate
实现迁移,将每个应用下的migrations目录中的中间文件同步到数据库中
模型类的创建
使用以下代码框架可创建一个模型类:
from django.db import models
class 模型类名(models.Model):
字段名 = models.字段类型(字段选项)
创建完模型类,生成迁移文件并执行迁移后,Django会在数据库中创建一个名为appname_modelname的表,例如当app名为bookstore,模型名为book时,所创建的表名即为bookstore_book。该表下的各个字段即上面代码中所设置的字段。
常用的模型字段
models中提供了许多种可用的字段,常用的几种及其参数简介如下:
(更多的字段类型可以参考https://docs.djangoproject.com/zh-hans/4.0/ref/models/fields/)
CharField(name, max_length, default)
数据库类型:varchar
必要参数为max_lengthBooleanField()
数据库类型:tinyint(1)
编程语言中:True或False
在数据库中:1或0DateField()
数据库类型:date
参数1.auto_now
:每次保存对象时,自动设置该字段为当前时间(取值True/False)
参数2.auto_now_add
:当对象第一次被创建时自动设置当前时间(取值True/False)
参数3.default
:设置当前时间(取值:字符串格式时间,如'2022-04-17')
注意:以上参数只能三选一DacimalField()
数据库类型:decimal(x,y)
编程语言中:使用小数表示值
参数1.max_digits
:位数总数,包括小数点后的位数,该值必须大于等于decimal_places
参数2.decimal_places
:小数点后的数字数量EmailField()
数据库类型:varchar
编程语言中:使用字符串IntegerField()
数据库类型:int
编程语言中:使用整数ImageField()
数据库类型:varchar(100)
作用:保存图片的路径TextField()
数据库类型:longtext
作用:表示不定长度的字符数据