Django 数据库迁移:makemigrations 和 migrate 命令详解及常见问题解决

1. 问题所示

最初始的状态是遇到这个问题

由于刚开始跑python web项目,开源项目附带的Readme,个别命令不太懂,对此详细研究其基本知识

在这里插入图片描述

最终的解决方案如下:

  • 清理迁移文件:删除迁移目录中的 .pyc 文件和 pycache 目录,然后重新运行 makemigrations
  • 检查应用配置:确保应用在 settings.py 文件中的 INSTALLED_APPS 列表中正确配置
  • 运行 makemigrations 指定应用:尝试指定应用运行 makemigrations:
python manage.py makemigrations <app_name>

2. python manage.py makemigrations

根据在 Django 应用中对模型(models.py)的修改生成新的迁移文件

这些迁移文件记录数据库模式的变更,如新增字段、删除字段或修改字段类型

基本的原理如下:

  • 扫描模型:Django 会扫描项目中的所有应用(apps)的 models.py 文件,识别出模型的变化
  • 生成迁移文件:根据模型的变化,Django 生成对应的迁移文件
    这些迁移文件保存在每个应用的 migrations 目录中,通常以 0001_initial.py、0002_auto_20230808_1234.py 这样的形式命名
  • 迁移文件内容:迁移文件是 Python 脚本,定义如何将数据库的当前状态更新到新的状态
    迁移文件包含数据库表的创建、字段的添加或删除、索引的添加等操作

3. python manage.py migrate

migrate 命令应用未应用的迁移文件中的变更,将数据库更新到最新的模式,会读取迁移文件,并在数据库中执行相应的操作

基本的原理如下:

  • 应用迁移:Django 读取迁移文件,并在数据库中执行这些迁移文件中定义的操作,比如创建表、添加字段、删除表等
  • 记录迁移状态:在数据库中维护一个 django_migrations 表,记录哪些迁移文件已经被应用,确保每个迁移文件只执行一次

4. 拓展

一、迁移主要的作用如下:

  • 版本控制:迁移文件可以被版本控制工具(如 Git)跟踪,这样团队中的所有成员都可以共享相同的数据库模式变更
  • 自动化:通过迁移,数据库模式的变更可以自动应用,减少手动更新数据库结构的错误和麻烦
  • 数据迁移:在某些情况下,迁移文件也可以包含数据迁移的逻辑,比如将旧表的数据迁移到新表中

二、迁移冲突和合并

  • 冲突:如果多个开发者在不同分支上对同一个模型做不同的更改,可能会出现迁移冲突
    Django 提供命令 python manage.py makemigrations --merge 来处理这种情况。
  • 合并:当迁移文件冲突时,可以手动编辑迁移文件或使用合并工具来解决冲突
    确保在合并迁移文件后,数据库状态与模型同步

三、 管理迁移

  • 回滚迁移python manage.py migrate <app_name> <migration_name> 回滚到特定的迁移点,撤销之前的迁移操作
  • 应用特定迁移python manage.py migrate <app_name> <migration_number> 只应用特定的迁移文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值