Django-02,连接数据库、定义模型、迁移文件

参考官方文档

开发工具及环境

PyCharm,Django5.2.6,Python3.11

定义模型

在 polls 应用的 model.py 中定义模型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField("date published")

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

每个模型都是 django.db.models.Model 类的子类。模型有许多类变量,对应着数据库表里的数据库字段。

每个字段都是 Field 类的实例,比如,字符字段被表示为 CharField ,日期时间字段被表示为 DateTimeField 。这表示字段的数据类型。

每个 Field 类实例变量的名字(例如 question_text 或 pub_date )也是表的字段名。

创建数据库表

Django 默认使用 sqlite3 作为数据库,一键即可安装:

python manage.py migrate

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

sqlite 扩展说明

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

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计