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 主要任务
- 根据对象的类型生成表结构
- 将对象、列表的操作,转换为SQL语句
- 将SQL查询到的结果转换为对象、列表
ORM 作用与优点
在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动。
- 提高开发效率。
- 不同数据库可以平滑切换。
ORM 解析过程
ORM 会将 Python 代码转成为 SQL 语句。
SQL 语句通过 pymysql 传送到数据库服务端。
在数据库中执行 SQL 语句并将结果返回。
ORM 对应关系
构建模型的流程
1. 在 models.py 中定义模型类,继承自 models.Model
2. 把应用加入 settings.py 文件的 INSTALLED_APPS 配置项中
将应用安装到INSTALLED_APPS中后,方可对模型中定义的模型类进行映射。这里的users应用是我们在上一节中手动创建安装好的,如应用未安装则无法为该应用中的模型创建数据表。(创建应用教程)
3. 生成迁移文件
生成迁移文件是通过ORM框架生成执行数据库操作所需的SQL语句。具体命令如下:
1 |
|
执行生成迁移的命令后,应用的migrations目录下会自动创建一个名为“0001_initial.py”的迁移文件文件,该文件包含生成的数据表的代码。
也可以直接使用命令查看迁移命令的执行结果:
表名是自动生成的,由App的名字和模型类名的小写字母组合而成。
主键 id 是自动添加的
外键的字段名后会自动加 ”_id”
模型类包含要存储的数据的基本字段和行为。通常,每个模型都映射到单个数据库表。通过阅读示例代码可以看出,所定义的person类下的两个属性,到数据库中变成了两个字段。
Django会为表增加自动增长的主键列(id),每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则Django不会再生成默认的主键列。
4. 执行迁移生成表
执行迁移文件则是执行迁移文件中的SQL语句。迁移文件生成之后,使用执行迁移文件命令生成对应的数据表。执行迁移文件的命令如下:
1 |
|
执行上述命令后,数据库(db.sqlite3)中会生成会以 “应用名_模型类名(小写)”形式命名的数据表,这里我们使用 SQLiteStudio 工具打开查看:
5. 使用模型类进行crud操作
见博客《Django模型操作》。『传送门』
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!