当前位置:首页 >> 信息化课堂 >> 办公软件

数据库迁移介绍及Django内置迁移工具的使用方法

作者:软码云 浏览:65 发布日期:2026-04-20
[导读]:Django 数据库迁移 在本文中,我们将介绍Django中管理数据库迁移的最佳解决方案。 阅读更多:Django 教程 什么是数据库迁移?

改了数据库字段,结果整个程序报错,数据还对不上,你是不是经常碰到这种状况?别慌,这差不多是每个开发人员都会踩到的坑。数据库迁移就是为了解决这个让人头疼的痛点才产生的。

到底什么是数据库迁移

有一种方法,它被称作数据库迁移,其本质是用于管理数据库结构发生变化的。在软件开发进程里,你的需求会出现改变,随之数据模型以及它也会跟着产生变化。就拿这样的情况来说,原本仅仅需要存储用户名,然而现在忽然要添加一个手机号,处于这种时刻,你就必须对数据库进行修改。

这一过程听闻起来蛮简单,然而实际着手去做却极为繁杂。你需要以手动方式于数据库里去增添字段,并且还要确保测试环境以及线上环境皆达成同步。更为繁杂的是,倘若你要回退至先前的版本,还得记着把那些增添的字段给删除掉。

有一种工具叫数据库迁移工具,它能够自动完成这些事情,它会记录下每一次的修改情况,进而生成一个脚本文件,你只要运行这个脚本文件,数据库便会自动进行更新,根本无需手动去进行操作,要是改错了,也能够通过一键实现回退。

怎么创建一个迁移脚本

构建迁移脚本的进程颇为简易,你需先行针对代码之中的模型文件予以调整,诸如增添一个字段或者移除一张表之类的操作。随后执行一条指令,工具便会自行对您所做出的改动展开侦测,并创生出与之相对应的迁移脚本。

python manage.py makemigrations

此脚本借助代码编写而成,并非直接书写有SQL语句。其具备的益处在于,无论你所运用的是MySQL,还是PostgreSQL,均可采用同一种方式予以处理。工具会依据你所选用的数据库类别,自动转化为恰当的SQL语句。

将生成的脚本放置于一个专门的文件夹之中,,其文件名通常携带着时间戳,以便于你依照顺序进行管理。每一个脚本之内均清晰写明了此次所要开展的操作,例如添加一个名为“作者”的字段,,该字段的类型为文本。

能将这些脚本上交至代码仓库中,团队成员在拉取代码之后同样能够看到。如此便确保了所有人针对数据库的改动是一致的,不会出现你实施了改动我却未进行改动的情形。

python manage.py migrate

如何把迁移应用到数据库

创作完迁移脚本之后,紧接着的步骤是将该脚本切实应用于数据库当中,你仅仅需要去运行一条指令,如此一来工具便会依照顺序去实现所有尚没有被应用过的迁移脚本。

在执行的进程当中,工具会自行记录下哪些迁移是已经完成过的。比如说,你已然拥有了三个迁移脚本,然而仅仅应用了前面那两个,那么在运行命令之后,就仅仅会去执行第三个。如此一来,你便无需为重复执行的情况而心存担忧了。

这一过程一般是自动化的,你无需去操心具体的SQL语句。工具会替你处理好全部细节,像是添加字段时的默认值、是否准许为空等等情况。要是执行过程当中出现错误,它会告知你何处存在问题。

python manage.py migrate --fake

对于团队协作而言,此功能极具效用。每个人将最新代码拉取之后,仅仅只需运行一下迁移命令,本地的数据库结构便会自动完成更新,无需再通过手动方式去进行调整。

怎样撤销已经应用的迁移

数据库迁移服务

处于某些时候,出现了错误纠改抑或是期望回归至先前的状况,此时撤销迁移便发挥其作用了。你能够借助一条指令,去回退最近一次的迁移,工具将自行生成实施反向操作的SQL,进而把刚才所做的改动撤销掉。

然需留意,撤销之举或致数据遗失。譬若汝增添一新字段且录入若干数据于其中,撤销之际该字段将被删去,其里数据亦随之消逝。故而于生产环境行撤销之前,宜先备份数据。

要是你期望回退多个版本,那么能够指定要回退至哪一个迁移。工具会将中间所有的迁移都依据顺序撤销掉。此功能在开展排查问题工作时用途极大,比如说你怀疑某个迁移致使了性能方面的问题,就能够把它回退掉进而查看查看。

有些工具是还支持去假装执行那种撤销操作的,这意思就是仅仅去修改记录然而却不会对数据库进行改动的,这种选项呢在某些尤为特殊的场景当中是可发挥作用的 ,就好像你早就已经通过手工方式将数据库给修复好了 ,彼时只需要让工具的记录去做一下同步动作就得了。

from django.db import models
class Blog(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.title

内置工具和第三方工具有什么区别

绝大多部分开发框架都皆会自身携带迁移工具,像Django、Rails、Laravel这些当然都存在。自己携带的工具一般跟框架自身的模型系统配合显著良好,使用颇具便利性,无需特意另行安装。

自行携带工具所具备的益处在于,开启包装即可使用,配置过程简便。你无需去钻研如何进行集成,直接敲击命令便可以。其不足之处在于,对框架存在颇高的依赖,要是你更换框架或者打算跨语言运用,或许就无法达成了。

python manage.py makemigrations

像是Flyway、Liquibase、goose等这类第三方工具,是与框架相互独立的。无论你使用的是Java,还是Go,亦或是Python,都能够借助同一个工具去管理迁移。它们一般在功能方面更为强大,对于更为复杂的场景是予以支持的。

在多个不同语言的项目存在需求时,或者在需要对迁移过程予以精细控制的状况下,第三方工具会是更为优良的选择,虽然其学习成本会相对高一些,有些公司还会将迁移工具整合到CI/CD流水线内,达成自动化部署结果。

from django.db import migrations, models
class Migration(migrations.Migration):
    dependencies = [
        ('app_name', '0001_initial'),
    ]
    operations = [
        migrations.AddField(
            model_name='blog',
            name='author',
            field=models.CharField(blank=True, max_length=100),
        ),
    ]

一个实际的例子帮你理解

假定你正着手研发一个博客系统,起初博客文章仅有标题以及内容这两个字段,你运用命令生成了初始的迁移脚本,在应用该脚本之后,数据库里便存有了相应的表。

python manage.py migrate

经过了一段光阴,你认为有必要增添作者信息,于是你于模型之中添加了一个author字段。接着运行创建迁移的指令,工具会察觉到这项变化,生成一个全新的迁移脚本,其中所撰写的乃是添加author字段的行为。

你去对脚本做一下检查,在确定毫无问题之后运行应用迁移的命令,工具会将这个脚本予以执行,数据库里就会多出一个author列,现有的数据要是没有作者,能够设置一个默认值或者暂且留空。

若之后你察觉到作者字段本不该添加,欲撤销此项改动,仅需运行撤销指令,工具便会生成删除author字段的SQL并予以执行。数据库将会恢复至先前的状态,整个进程仅需寥寥数秒。

此时此刻你已然明晰了数据库迁移的基本运用方式,你平常于项目里遭遇数据库构造发生变更之际,是径直借助SQL以手动方式去修改,还是运用迁移工具来实施管理?欢迎于评论区域分享你的做法,点个赞以便让更多人得以目击这篇实用性指南。

免责声明:转载请注明出处:https://www.ruanma.com/oa-lesson/297.html

扫一扫  微信聊

需求分析&设计文档

24小时免费出软件开发网站建设方案文档

请填写下方表单,我们会尽快与您联系
感谢您的咨询,我们会尽快给您回复!