Django Migration (New in Django 1.7)

文章目录

    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.”

    参考文档

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式