【Django】一、 模型(Models)之初识
前言:Django 通过建立一个数据库映射,来用一套代码管理所有类型数据库操作。应用时,只需配置数据库信息,然后用一套代码对其进行管理即可。
1. 引入
Django模型主要是用来关联数据库,相当于一个ORM(Object Relational Mapping)系统。
ORM(Object Relational Mapping)是指对象关系映射,是一种程序设计与软件工程技术。可以用于实现面向对象编程中不同类型系统之间的数据转换。
近一步地,可以将Django模型其理解为是连接着上层编程语言与底层实体数据库的桥梁。
更近一步地,也即我们可以直接用python使用同一数据库描述对象来完成不同的数据库操作。
当前django 支持数据库包括 SQLite, MySQL, Oracle, MariaDB, PostgreSQL等。
这就是通过Django模型来实现的,我们只需要关注业务代码业务逻辑,而不必关注具体的数据库类型。
2. 管理
Django模型就可以通俗理解为data model,也即数据模型。也就是数据库。
- 数据库模型一般写在
models.py
中 - 数据库配置一般写在
settings.py
中 models.py
中通过引入django.db.models
模块进行管理- 每一个
model
通过继承django.db.models.Model
来新建 - 每一个
model
都实际映射为数据库中一个表
下面通过一个官方示例来解释上面的一些信息。
代码示例:
## 数据库示例
## 自官方文档: https://docs.djangoproject.com/en/4.1/intro/overview/
# 引入django数据库包
from django.db import models
# 通过继承,新建表 Reporter
# 表中包含 full_name 字段
class Reporter(models.Model):
full_name = models.CharField(max_length=70)
def __str__(self):
return self.full_name
# 通过继承,新建表 Article
# 表中包含 pub_data, headline, content, reporter 字段
class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
def __str__(self):
return self.headline
示例说明:
-
Reporter
和Article
即为两个模型,通过继承django.db.models.Model
得到,也就是对应于数据库两个表。 -
各自类中声明的变量也就是对应于各自表中的字段。如
full_name
和pub_date
,headline
,content
,reporter
等。 -
django.db.models.xxxField
标志着变量的类型,也即数据库中字段类型。 -
__str__
为python类的常用魔法函数,作用是当打印此类时,显示该函数返回内容。
3 迁移
通过上述操作可以完成数据库操作命令的编写,包括新建类(也即新建表)、变量设置(也即字段设置)。
但以上这些只是操作代码,如果要生成实体的数据库文件,需要去执行它,去完成实际数据库的生成/修改/迁移。
django数据库的迁移,通常需要两个步骤:
-
检查**
> python manage.py makemigrations
作用:
makemigrations
作用是让Django去检查创建或修改的数据库,如果不合法会给出提示,生成sql语句,但还未将真正改动迁移到数据库效果:
第一次执行时,会在
migrations/
下创建0001_inital.py
文件,记录建表及依赖信息。后续执行时,会在
migraitons/
下创建类似0002_xxx.py
文件,记录修改的字段。# 打印信息 $ python manage.py sqlmigrate
-
迁移
> python manage.py migrate
作用:
migrate
作用是执行sql语句,将上述记录的修改应用到数据库中,将真正改动迁移到数据库中,完成实际的表的修改、新建等操作
4 查看 ∗ ^{*} ∗
数据库新建后,会生成对应的数据库文件,针对不同数据库,可通过以下方式对数据库文件进行查看
4.1 SQLite数据库
SQLite是一个进程内的库,无服务器、无依赖、无配置、无安装、轻量级、事务性。
Django中已经配置了SQLite数据库,默认情况下,即使用该库作为后端数据的管理操作。
- 使用命令行查看
默认下,可以在终端输入 > sqlite3
完成一些SQLite操作,常用命令如下
.open sql_name // 打开数据库
.table // 查看所有表
.schema table_name // 查看表结构
select * from table_name // 查看表信息
INSERT INTO table_name VALUES (x, y, z ...) // 向表内插入数据
.quit // 退出sqlite
至于其他的CRUD
操作,可自行搜索和学习。
- 使用软件查看
Windows 下,可以使用 sqlitespy 软件查看
db.sqlite3
文件;Mac下,可以使用 sqlitebrowser、SQLiteStudio 软件查看
db.sqlite3
文件