SQL基础、ORM与Django模型构建

本文最后更新于:2 年前

SQL 基础回顾

什么是SQL

  • SQL全称:Structured Query Language,为结构化查询语言。

  • SQL语言的主要功能就是同关系型数据库建立联系,进行沟通,被作为关系型数据库管理系统的标准语言

  • 通过SQL语句可以从数据库中查询数据、新增数据、修改数据、删除数据等。

SQL基础语句

  • 添加语句

    1
    INSERT INTO table_name VALUES (value1,value2,value3,...);
  • 修改语句

    1
    UPDATE table_name SET column1=value1,column2=value2,...  WHERE column1=value;
  • 删除语句

    1
    DELETE FROM table_name WHERE column1=value;
  • 查询语句

    1
    SELECT column_name,column_name FROM table_name;

Django 模型

模型(Models)用来定义Django中数据的结构和行为,通常情况下每个Django模型映射数据库中的一张表。

Django支持多种数据库,如SQLite、MySQL、PostgreSQL、Oracle, 我们可以根据自己业务需求选择不同的数据库。

Django 为这些数据库提供了统一的调用API,封装了丰富的数据操作方法,开发人员无需专门学习数据库访问技术,便能管理数据库中的数据。

Django 模型是使用 Python 代码对数据库中数据的描述,是数据的结构,等效于 SQL 中的 CREATE TABLE 语句,不过是用 Python 代码而非 SQL 表述的。

  • Django中的模型以 Python 类的形式定义,每个模型类是 Django.db.models.Model 的子类。

  • Django 通过模型在背后执行 SQL,每个模型对应一张数据表,模型类的每个属性对应数据表中的一个字段。

Django ORM

MVC框架中包括一个重要的部分,就是对象关系映射(Object Relational Mapping,简称 ORM ),它实现了数据模型与数据库的解耦,即面向对象编程语言里不同类型系统的数据之间的转换。数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。

ORM在业务逻辑层和数据库层之间充当了桥梁的作用

ORM 主要任务

  • 根据对象的类型生成表结构
  • 将对象、列表的操作,转换为SQL语句
  • 将SQL查询到的结果转换为对象、列表

ORM 作用与优点

在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动。

  • 提高开发效率。
  • 不同数据库可以平滑切换。

ORM 解析过程

  1. ORM 会将 Python 代码转成为 SQL 语句。

  2. SQL 语句通过 pymysql 传送到数据库服务端。

  3. 在数据库中执行 SQL 语句并将结果返回。

ORM 对应关系

ORM 对应关系表

构建模型的流程

1. 在 models.py 中定义模型类,继承自 models.Model

定义模型类

2. 把应用加入 settings.py 文件的 INSTALLED_APPS 配置项中

将应用安装到INSTALLED_APPS中后,方可对模型中定义的模型类进行映射。这里的users应用是我们在上一节中手动创建安装好的,如应用未安装则无法为该应用中的模型创建数据表。(创建应用教程

3. 生成迁移文件

生成迁移文件是通过ORM框架生成执行数据库操作所需的SQL语句。具体命令如下:

1
python manage.py makemigrations

执行生成迁移的命令后,应用的migrations目录下会自动创建一个名为“0001_initial.py”的迁移文件文件,该文件包含生成的数据表的代码。

也可以直接使用命令查看迁移命令的执行结果:

  • 表名是自动生成的,由App的名字和模型类名的小写字母组合而成。

  • 主键 id 是自动添加的

  • 外键的字段名后会自动加 ”_id”

模型类包含要存储的数据的基本字段和行为。通常,每个模型都映射到单个数据库表。通过阅读示例代码可以看出,所定义的person类下的两个属性,到数据库中变成了两个字段。

Django会为表增加自动增长的主键列(id),每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则Django不会再生成默认的主键列。

4. 执行迁移生成表

执行迁移文件则是执行迁移文件中的SQL语句。迁移文件生成之后,使用执行迁移文件命令生成对应的数据表。执行迁移文件的命令如下:

1
python manage.py migrate

执行迁移文件

执行上述命令后,数据库(db.sqlite3)中会生成会以 “应用名_模型类名(小写)”形式命名的数据表,这里我们使用 SQLiteStudio 工具打开查看:

5. 使用模型类进行crud操作

见博客《Django模型操作》传送门