1、模型层
1.1、什么是模型
- 模型是一个Python类,它是由 django.db.models.Model 派生出的一个子类。
- 一个模型类代表数据库中的一张数据表
- 模型类中的每一个类属性都代表数据表中的一个字段
- 模型是数据交互(增删改查)的接口,是表示和操作数据库的方法和方式
2、ORM框架
定义:
ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库。
作用:
- 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。
- 根据设计的模型类生成数据表中的表格。
- 通过简单的配置就可以进行数据库的切换。
优点:
- 只需要面向对象编程,不需要面向数据库编写代码。
- 对数据库的操作都转化成对类属性和方法的操作;
- 不用编写各种数据库的SQL语句
- 实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异。
- 不再关注用的是MySQL、Oracle、等数据库的内部细节;
- 通过简单的配置就可以轻松更换数据库,而不需要修改代码;
缺点:
- 对于复杂业务,使用成本较高;
- 根据对象的操作转换成SQL语句,根据查询的结果转化成对象,在映射过程中有性能损失;
映射图:
3、模型类 - 创建
模型类创建的格式大致如下
from django.db import models
# Create your models here.
class 模型类名(models.Model):
字段名 = models.字段类型(字段选项)
class Meta:
verbose_name = "文章分类" # 表名注释
verbose_name_plural = verbose_name # 加上这个admin后台里:复数形式就不展示“s”了
def __str__(self):
return self.name
4、模型创建-示例
此示例为添加一个博客文章分类的数据表来存放博客中文章分类信息
4.1、添加一个博客的app,命名为user
python manage.py startapp user
4.2、添加模型类并注册app
模型类代码示例
from django.db import models
# Create your models here.
class Category(models.Model):
# 会自动创建自增长的id字段
name = models.CharField(max_length=50, unique=True, verbose_name="分类名称")
# 定义数据表的name字段(最大长度50个字节,唯一)
# 字符串类型,max_length是必填参数
create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
# 定义数据表中的create_time字段
update_time = models.DateTimeField(verbose_name="修改时间", auto_now=True)
# 定义数据表中的update_time字段
class Meta:
# db_table = "category" #指定数据库里实际的表名
# appname+classname 默认表名命名规则(app名字_类名) user_category
verbose_name = "文章分类" # 表名注释
verbose_name_plural = verbose_name # 加上这个admin后台里:复数形式就不展示“s”了
def __str__(self):
return self.name
注册app,参考 本博客 Django创建子应用
4.3、数据库迁移
迁移是Django同步您对模型所做更改(添加字段、删除模型等)到您的数据库模式的方式。
生成迁移文件
- 执行 python manage.py makemigrations
将应用下的models.py 文件生成一个中间文件,并保存在migrations文件夹中
执行迁移脚本程序
- 执行 python manage.py migrate
- 执行迁移脚本程序实现迁移。将每个应用下的migrations文件夹中的中间文件同步回数据库