Django迁移的理解(migrate和makemigrations)

Django迁移的理解(migrate和makemigrations)

makemigrations的作用

当执行python manage.py makemigrations命令时,Django会检索项目中models.py文件里的模型类,根据这些模型类来生成一些迁移文件,这些文件会出现在每个应用(app)的migrations文件夹下,里面的文件名会类似于下方这样

- 0001_initial
- 0002_some_change
- 0003_another_change
- 0004_undo_something

每一次执行makemigrations,这些文件前面的编号会根据上一次的编号进行递增。文件中记录了本次执行makemigrations时,应用(app)下的模型类相较于上一次执行命令(makemigrations)时的区别,如果是第一次执行,那么就会是进行初始化。

这些文件的作用是记录每一次模型类变化的内容,可以将这些迁移文件看作数据库版本控制的记录文件,每一次模型类的增加、修改、删除都记录在这些文件中,这样我们可以将数据库的变化恢复到某次迁移之前的样子。如果想将开发出来的项目给别人使用时,在别人的电脑上可以根据迁移文件快速构建出和自己开发时同样的数据库表。

migrate的作用

执行python manage.py migrate前,一般都需要使用makemigrations生成迁移文件(需要了解模型类有什么变化),然后根据这些迁移文件中的记录的变化内容应用到数据库中,使数据库中的表能够与当前模型类对应。

migrate可以将新的变化应用到数据库中,也可以将上一次的迁移撤销或者还原到某次迁移之前的状态。这种撤销迁移的效果也可以自己手动来实现,例如直接对迁移文件、模型类、数据库表进行修改,但是django中一个django_migrations表,这个表记录了每个应用(app)每一次的迁移记录,如果手动删除时没有涉及到这个表的修改,那么便会出现一些错误。

撤销book应用的某次迁移

# migrate后面需要写应用名字,0002代表的是迁移文件前面的编号
python manage.py migrate books 0002

撤销某个应用的所有迁移

# 撤销所有迁移时,使用zero来代替迁移文件编号
python manage.py migrate books zero

撤销不是100%能够成功的,有一些已经应用的改变是不可撤销的,那么尝试撤销这种改变会引发

IrreversibleError异常,那么这种情况就需要自行解决了。

参考链接

Django官网-迁移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值