Django | 模型层及ORM

Django·Programming · 2022-04-17

什么是模型

  • 模型是一个Python类,即class,它由django.db.models.Model所派生出来的子类
  • 一个模型类即代表了数据库中的一张数据表
  • 模型类的每一个类属性都代表数据表中的一个字段
  • 模型是数据交互的接口,是表示和操作数据库的方法和方式

ORM框架

定义

ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,允许使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库。

作用

  1. 建立模型类与表之间的对应关系,允许我们通过面向对象的方式来操作数据库;
  2. 根据设计的模型类生成数据库中的表格;
  3. 通过简单的配置即可实现数据库的切换。

优势

  • 只需要面向对象编程,不需要面向数据库编写代码

    1. 对数据库的操作都转化成了对类属性和方法的操作;
    2. 不用编写各种数据库的SQL语句。
  • 实现数据模型和数据库间的解耦,屏蔽了不同数据库操作上的差异

    1. 不用关注如MySQL, Oracle等数据库的内部细节差异;
    2. 通过简单的配置即可轻松更换数据库(修改引擎),不需要修改代码。

劣势

  1. 对于复杂业务的使用成本较高;
  2. 本质是根据对象的操作转换成SQL语句,再根据查询的结果转换成对象,在映射过程中会有性能损失。

映射关系

ORMDB
数据表
对象数据行
属性字段

数据库迁移

迁移是指Django将模型所做的更改(添加字段,删除模型等)同步到数据库模式的方式,其操作步骤如下:

  1. 生成迁移文件,使用py manage.py makemigrations
    将应用下的models.py文件生成一个中间文件,并保存在migrations文件夹下
  2. 执行迁移程序,使用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_length
  • BooleanField()
    数据库类型:tinyint(1)
    编程语言中:True或False
    在数据库中:1或0
  • DateField()
    数据库类型: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
    作用:表示不定长度的字符数据