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>
只应用特定的迁移文件