Files
djangoadmin-wiki/DjangoAdmin_Django_AntdVue/zh/volume6/db-migrate.md
T
2026-09-13 17:33:13 +08:00

156 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据库迁移
## 概述
使用 Django 内置的迁移系统管理数据库结构变更。Django 的迁移系统基于 `django.db.migrations` 模块,能够自动检测模型变更并生成迁移脚本。
:::tip 迁移工具链
- **结构迁移**:Django 内置迁移系统(`makemigrations` + `migrate`)
- **字段注释**:Django 4.1+ 通过 `db_comment` 参数自动添加数据库字段注释
:::
## 全新安装初始化
首次部署时,使用 Django 迁移命令完成建表:
```bash
# 方式一:执行所有迁移
python manage.py migrate
# 方式二:先生成迁移文件,再执行
python manage.py makemigrations
python manage.py migrate
```
:::tip 初始化流程
1. 确保数据库已创建:`CREATE DATABASE djangoadmin.django.elevue DEFAULT CHARACTER SET utf8mb4;`
2. 确保 `.env` 中的数据库配置正确
3. 执行 `python manage.py migrate` 自动创建所有表
:::
## Django 迁移命令
### 生成迁移脚本
修改模型后,执行以下命令自动生成迁移脚本:
```bash
# 为所有应用生成迁移
python manage.py makemigrations
# 为指定应用生成迁移
python manage.py makemigrations example
# 查看迁移状态
python manage.py showmigrations
```
:::tip 注意事项
- 执行前确保数据库连接正常(`.env` 中的数据库配置正确)
- 自动生成的迁移文件需人工审查,确认无误后再执行
- 迁移文件位于各应用的 `migrations/` 目录
:::
### 应用迁移
```bash
# 应用所有待执行的迁移
python manage.py migrate
# 应用指定应用的迁移
python manage.py migrate example
# 应用到指定迁移版本
python manage.py migrate example 0001
```
### 回滚迁移
```bash
# 回滚指定应用到初始状态
python manage.py migrate example zero
# 回滚到指定版本
python manage.py migrate example 0001
```
### 查看迁移状态
```bash
# 查看所有应用的迁移状态
python manage.py showmigrations
# 查看指定应用的迁移状态
python manage.py showmigrations example
# 查看迁移的 SQL 语句(不执行)
python manage.py sqlmigrate example 0001
```
### 手动标记迁移
对于已有数据库,手动标记为已迁移状态:
```bash
# 标记指定应用为已迁移
python manage.py migrate --fake example
```
## 字段注释管理
Django 4.1+ 支持通过 `db_comment` 参数为数据库字段添加注释。项目中的模型已自动生成 `db_comment`,在执行 `migrate` 时会自动同步到数据库:
```python
class Example(BaseModel):
name = models.CharField(
max_length=100,
verbose_name="案例名称",
db_comment='案例名称' # 数据库字段注释
)
```
## 迁移文件结构
每个应用的迁移文件位于 `application/{app_name}/migrations/` 目录:
```
application/example/
├── __init__.py
├── models.py
├── forms.py
├── services.py
├── views.py
├── urls.py
├── apps.py
├── admin.py
└── migrations/
├── __init__.py
├── 0001_initial.py # 初始迁移
└── 0002_xxx.py # 后续迁移
```
## 常见操作速查
| 场景 | 命令 |
|------|------|
| 全新安装 | `python manage.py migrate` |
| 模型变更后生成迁移 | `python manage.py makemigrations` |
| 应用迁移 | `python manage.py migrate` |
| 回滚指定应用 | `python manage.py migrate <app> zero` |
| 查看迁移状态 | `python manage.py showmigrations` |
| 查看迁移 SQL | `python manage.py sqlmigrate <app> <migration>` |
## 常见问题与排错
| 问题 | 原因 | 解决方案 |
|:----|:----|:----|
| 迁移冲突 | 多人同时修改同一模型 | `python manage.py makemigrations --merge` 合并迁移 |
| 迁移文件丢失 | 删除了 migrations 目录 | 重新 `makemigrations` 生成 |
| 表已存在 | 手动建表后执行迁移 | `python manage.py migrate --fake <app>` |
| 字段不存在 | 模型与数据库不一致 | 检查迁移文件,手动修复数据库 |
| 迁移执行缓慢 | 大表结构变更 | 考虑分批迁移或在低峰期执行 |
## 总结
Django 迁移系统通过 `makemigrations` 和 `migrate` 命令管理数据库结构变更。模型修改后自动生成迁移文件,审查无误后执行迁移。生产环境务必做好备份,迁移前先在测试环境验证。