14 Django 模型之数据库迁移

在上一篇中,我们讨论了如何在 Django 中创建模型,通过定义类来表示数据库中的表和字段。现在,我们将在此基础上进一步探索如何对这些模型进行数据库迁移。数据库迁移是在 Django 中同步模型和数据库结构的关键步骤。

什么是数据库迁移

数据库迁移是指将模型的变更(如添加、修改或删除字段)应用到数据库中。Django 提供了强大的迁移工具,使得这一过程变得高效和简单。

创建数据库迁移

当你创建或修改模型后,Django 需要知道如何将这些变化应用到数据库。这个过程一般分为以下几步:

  1. 创建迁移: 使用命令 makemigrations 生成迁移文件。
  2. 应用迁移: 使用命令 migrate 将迁移应用到数据库。

实例:创建迁移

假设在上一篇教程中,我们定义了一个 Book 模型,如下所示:

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

class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
published_date = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)

接下来,我们希望为 Book 模型添加一个新的字段 isbn,以存储图书的国际标准书号。这一步骤就是我们修改模型的开始。

1
2
3
4
5
6
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
published_date = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)
isbn = models.CharField(max_length=13, unique=True) # 新添加的字段

生成迁移文件

保存模型后,打开终端并在项目根目录下运行以下命令:

1
python manage.py makemigrations

您将看到类似于以下的输出:

1
2
3
Migrations for 'your_app_name':
your_app_name/migrations/0002_auto_20230301_1234.py
- Add field isbn to book

此命令会生成一个迁移文件,记录对模型 Book 结构的改变。

应用迁移

接下来,我们需要将迁移应用到数据库中。运行以下命令:

1
python manage.py migrate

这时,Django 会根据迁移文件,在数据库中添加新字段 isbn。您会看到类似的输出:

1
Applying your_app_name.0002_auto_20230301_1234... OK

如何查看迁移状态

您可以使用以下命令来查看当前的迁移状态:

1
python manage.py showmigrations

这将列出您应用的所有迁移及其状态。

注意事项

  • 迁移的顺序: Django 迁移是有顺序的,后续的迁移必须建立在前面的基础上。
  • 合并迁移: 当多个迁移文件并行存在时,可能会导致迁移冲突。Django 提供了合并迁移的命令,用于解决这种情况。

清理迁移

在开发过程中,可能会需要重置迁移。在这种情况下,可以删除数据库和迁移文件,然后重新生成迁移。

例如,如果您希望重置 your_app_name 的所有迁移,可以执行以下命令:

1
2
3
4
5
6
7
# 删除迁移文件
rm your_app_name/migrations/0*.py
# 清空数据库
python manage.py flush
# 重新生成迁移
python manage.py makemigrations
python manage.py migrate

总结

在这一部分中,我们学习了如何为 Django 模型创建数据库迁移,并将模型的变化同步到数据库中。通过这个过程,我们可以灵活地管理数据库结构,使其与代码保持一致。

在接下来的教程中,我们将继续讨论与数据库结构管理相关的主题,探索如何管理和维护我们的数据库。

请继续关注《Django 模型之管理数据库结构》。

14 Django 模型之数据库迁移

https://zglg.work/django-zero/14/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论