Django 模型迁移:从“定义类”到“真正建表”的 2 条命令
【摘要】 Django 模型迁移:从“定义类”到“真正建表”的 2 条命令 一、为什么会出现“没有表”定义了模型类 ≠ 数据库里就有表。Django 的 ORM 采用「先描述、后迁移」机制:用 Python 类描述表结构(models.py)。用 makemigrations 生成“建表/改表脚本”。用 migrate 真正把脚本执行到数据库。只有完成 2 + 3,才能在数据库里看到对应的表。 二、...
Django 模型迁移:从“定义类”到“真正建表”的 2 条命令
一、为什么会出现“没有表”
-
定义了模型类 ≠ 数据库里就有表。
-
Django 的 ORM 采用「先描述、后迁移」机制:
-
用 Python 类描述表结构(
models.py
)。 -
用
makemigrations
生成“建表/改表脚本”。 -
用
migrate
真正把脚本执行到数据库。
-
-
只有完成 2 + 3,才能在数据库里看到对应的表。
二、两条核心命令
命令 | 作用 | 类比 |
---|---|---|
python manage.py makemigrations |
扫描models.py → 生成迁移文件(*.py) |
“写施工图纸” |
python manage.py migrate |
把迁移文件翻译成 SQL 并执行到数据库 | “按图纸盖房子” |
三、一步一步来
- 定义模型类(已完成)
# book/models.py
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=20)
class People(models.Model):
name = models.CharField(max_length=20)
gender = models.BooleanField()
book = models.ForeignKey(Book, on_delete=models.CASCADE)
-
注册子应用
在book_manager/settings.py
的INSTALLED_APPS
里加上'book'
,否则 Django 检测不到模型。 -
生成迁移文件
python manage.py makemigrations
成功后会提示:
Migrations for 'book':
book/migrations/0001_initial.py
- Create model Book
- Create model People
此时数据库里还没有表,只有 book/migrations/0001_initial.py
这个“施工图”。
- 执行迁移(真正建表)
python manage.py migrate
输出示例:
Applying book.0001_initial... OK
现在数据库里会出现:
book_book (id, name)
book_people (id, name, gender, book_id)
四、常见疑问 FAQ
问题 | 原因 & 解决 |
---|---|
No changes detected |
子应用未注册 → 确认 INSTALLED_APPS 包含 'book' 。 |
缺少表 | 只执行了 makemigrations 没执行 migrate → 补跑 migrate 。 |
修改字段后无效 | 修改模型 → 重新 makemigrations → migrate 即可。 |
五、一分钟速记
-
改模型 →
makemigrations
(生成脚本) -
真正建表 →
migrate
(执行脚本) -
顺序不能反,缺一不可。
把这两条命令刻在脑子里:
python manage.py makemigrations
python manage.py migrate
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)