Django Migration (New in Django 1.7)

更新日期: 2017-06-15 阅读次数: 4504 分类: Django

Django 1.7 引入了 migration 的概念,用于方便的处理 model 中增加字段、删除字段 等造成的数据库改表问题。

为何要整理这篇笔记

使用了 Django 1.7 之后,发现将一个字段由 SlugField 修改成 CharField 之后, SlugField 对应的 index 并没有被删除掉。所以,需要确认一下,在什么情况下可以使 用 migration,什么情况下不可以使用。

migration 设计到的命令

  • python manage.py makemigrations
    • 用于生成 migration 文件
  • python manage.py migrate
    • 执行或撤销 migration, 并列出状态
  • python manage.py sqlmigrate
    • 对应的 SQL 操作

不同数据库对 migration 的支持、与实现大不相同

PostgreSQL > MySQL > SQLite

因为 SQLite 本身对 schema alteration 的支持就不够。通常是创建一个新表,数据迁 移过来,再删旧表。

修改字段属性是否能被 detect 到

增加、删除字段貌似是没问题的,但是修改字段属性做的貌似不好。所以一定要认真读取 SQL.

"Your models will be scanned and compared to the versions currently contained in your migration files, and then a new set of migrations will be written out. Make sure to read the output to see what makemigrations thinks you have changed - it’s not perfect, and for complex changes it might not be detecting what you expect."

参考文档

爱评论不评论