django 命令migrate相关操作 200317

本文深入解析Django数据库迁移机制,包括迁移脚本的作用、迁移表django_migrations的功能、如何使用--fake和--fake-initial命令来更新迁移状态而不改变数据,以及在已有数据表中建立模型类关联的方法。

在这里插入图片描述

了解迁移脚本

在这里插入图片描述

迁移表 django_migrations

在这里插入图片描述

在这里插入图片描述

这个表记录了完成了哪些迁移文件的执行

在这里插入图片描述

–fake 只做记录 不变数据

在这里插入图片描述

在这里插入图片描述

正常的迁移

  • 改变数据表
  • 记灵迁移情况

使用了fake命令后

只做第二步,跳过第一步

需要明确应用场景

–fake-initial

在这里插入图片描述

在这里插入图片描述

让已有的表与模型类产生关联

  • 清空迁移记录表中的相关信息
  • 定模型类,让模型类的字段与实际表字段一致
  • 执行迁移命令 python manage.py migrate 应用名 --fake-initial

后面就正常了

在这里插入图片描述

小结

在这里插入图片描述

### Django 中 `migrate` 命令的使用说明 `migrate` 是 Django 提供的一个核心管理命令,用于应用或撤销数据库迁移文件。它通过执行之前由 `makemigrations` 创建的迁移脚本,来同步模型定义与实际数据库结构之间的差异。 #### 1. `migrate` 的基本功能 当运行 `python manage.py migrate` 时,Django 将会扫描项目中的所有应用程序,并查找未被应用的迁移文件。这些迁移文件通常位于每个应用的 `migrations/` 文件夹下[^2]。随后,Django 根据迁移文件的内容更新数据库模式(schema),例如创建表、修改字段或删除表等操作[^3]。 #### 2. 运行方式 以下是几种常用的 `migrate` 命令形式: - **全局迁移** 应用整个项目的迁移文件: ```bash python manage.py migrate ``` - **指定应用迁移** 只针对某个特定的应用程序应用迁移文件: ```bash python manage.py migrate app_name ``` - **回滚迁移** 如果需要撤消最近的一次迁移,可以使用以下命令: ```bash python manage.py migrate app_name zero ``` 或者退回到某一个具体的版本号: ```bash python manage.py migrate app_name migration_number ``` - **多数据库支持** 当项目中有多个数据库配置时,可以通过 `--database` 参数指定目标数据库: ```bash python manage.py migrate --database=bak ``` #### 3. 工作原理 `migrate` 命令的核心工作流程如下: - 它依赖于 `_django_migrations_` 表记录每次成功应用的迁移历史。 - 遍历所有的迁移文件并按照其依赖关系依次执行 SQL 脚本。 - 更新 `_django_migrations_` 表以标记哪些迁移已被应用[^4]。 #### 4. 常见问题及其解决方案 ##### (1)无法找到迁移文件 如果遇到错误提示找不到迁移文件,则可能是因为尚未调用过 `makemigrations` 来生成它们。此时应先运行: ```bash python manage.py makemigrations ``` 然后再尝试重新执行 `migrate` 操作[^1]。 ##### (2)重复迁移冲突 有时可能会因为团队协作过程中不同成员提交了相互冲突的迁移文件而导致此情况发生。解决方法之一是手动编辑其中一个迁移文件调整其中的依赖项;另一种更激进的方式则是清空现有数据后重建整个环境——但这仅适用于开发阶段而非生产环境中。 ##### (3)跨版本兼容性问题 升级至新版本Django之后发现旧版遗留下来的某些特殊类型的字段不再受支持等情况较为普遍。对此建议查阅官方文档查看是否有替代方案或者考虑自定义实现相应逻辑处理此类特殊情况。 --- ### 示例代码展示如何编写简单的迁移过程 假设我们有一个名为 `books` 的应用,在该应用下的 models.py 如下所示: ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) def __str__(self): return self.title ``` 接着我们可以按顺序完成下面两步操作: 1. 创造新的迁移文件: ```bash python manage.py makemigrations books ``` 2. 实际部署更改到数据库里去: ```bash python manage.py migrate ``` 这样就完成了从定义模型到真正存储在数据库中的全过程。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值