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 聊聊, 查看更多联系方式