开发工具及环境
PyCharm,Django5.2.6,Python3.11
定义模型
在 polls 应用的 model.py 中定义模型
|
|
每个模型都是 django.db.models.Model 类的子类。模型有许多类变量,对应着数据库表里的数据库字段。
每个字段都是 Field 类的实例,比如,字符字段被表示为 CharField ,日期时间字段被表示为 DateTimeField 。这表示字段的数据类型。
每个 Field 类实例变量的名字(例如 question_text 或 pub_date )也是表的字段名。
创建数据库表
Django 默认使用 sqlite3 作为数据库,一键即可安装:
python manage.py migrate

安装完成后会在项目目录下出现一个 db.sqlite3 文件

sqlite 数据库有.sqlite 和.db 两种扩展名:
-
.sqlite 文件是 SQLite 的默认数据库文件格式。它是一种自包含的文件,包含了数据库的结构和数据。.sqlite 文件通过一系列的表格来组织数据,每个表格包含多个行和列。一个*.sqlite 文件可以包含多个表格,而每个表格可以存储不同类型的数据。
-
.db 文件是 SQLite 数据库的另一种扩展名。它也可用于存储 SQLite 数据库的结构和数据。实际上,.db 文件是对.sqlite 文件的一个简化形式,只存储数据而不存储数据库结构。因此,.db 文件通常比对应的*.sqlite 文件更小。
什么是数据库迁移
比如要创建一个 Book 模型来存储图书的信息。在 Django 中,通过定义模型类 Model来描述每个图书实体,然后将其映射到数据库中的表。然而,当对模型进行更改时,比如添加新的字段或修改字段类型,需要修改数据库的结构以与新的模型定义保持一致。这就是数据库迁移的概念。数据库迁移是一种自动化的方式,用于将模型类的变更反映到数据库结构。它可以添加、修改和删除数据库中的表、字段或索引等结构。
举例:在项目中添加了新的模型类 Book,需要运行 python manage.py makemigrations命令创建新的迁移文件。这个命令会检测项目的模型变更(比如新增、修改、移动模型),然后生成对应的迁移文件,其中包含了需要修改的数据库结构。
生成新的数据库迁移文件后,运行python manage.py migrate,Django 才会将这些变更应用到数据库中,并更新表结构。
迁移文件生成过程
python manage.py makemigrations
-
Django 会检查项目中的每个应用的模型定义,并与上次执行迁移时的模型状态进行比对。
-
找到所有变化的模型,比如新添加的模型、字段的变更等,并生成一个包含这些变化的迁移文件。
-
迁移文件是一个 Python 脚本,其中包含了需要应用到数据库的操作,比如创建表、添加字段、创建索引等。
-
Django 使用名称和时间戳为每个迁移文件生成一个唯一的标识符,以便将来能准确地识别和应用这些变化。
迁移文件应用过程
python manage.py migrate
-
Django 会检查数据库中的 django_migrations 表,该表记录了已经应用的迁移文件。
-
然后查找尚未应用的所有迁移文件,并按照它们的时间戳顺序应用。对于每个迁移文件,依次执行其中包含的操作,比如创建表、添加字段、创建索引等。
-
最后将每个迁移文件的信息记录到 django_migrations 表中,以便下次执行迁移时能跳过已经应用的文件。
迁移冲突和合并
-
冲突:如果多个开发者在不同分支上对同一个模型做不同的更改,可能会出现迁移冲突 ,可以用 python manage.py makemigrations –merge 来处理这种情况。
-
合并:当迁移文件冲突时,可以手动编辑迁移文件或使用合并工具来解决冲突 保在合并迁移文件后,数据库状态与模型同步
实践
添加应用到项目中
polls 应用的 PollsConfig 类写在文件 polls/apps.py 中,所以它的点式路径是 ‘polls.apps.PollsConfig’。然后在文件 mysite/settings.py 中 INSTALLED_APPS 子项添加点式路径

生成迁移文件和数据库表
依次运行 python manage.py makemigrations polls,python manage.py migrate