跟随Flask Web开发一本书第五章做Flask-Migrate数据库迁移,遇到了Target database is not up to date报错、No changes in schema detected报错。网上搜了很多帖子,中文的、英文的,最终在评论中找到了原因,原因就是我没明白Flask-Migrate数据库迁移的应用场景。
Flask-Migrate数据库迁移应用场景(针对《Flask Web》第五章的讲解,原文要表达如下意思):
比如要对User表增加phone字段,记录每个人手机号,这时候会用到Flask-Migrate,实现对表结构的更改
比如要对User表增加phone字段,记录每个人手机号,这时候会用到Flask-Migrate,实现对表结构的更改
比如要对User表增加phone字段,记录每个人手机号,这时候会用到Flask-Migrate,实现对表结构的更改
(重要的事情说三遍)
步骤:
1. 用db.create_all()创建了User表,表中有id、username、role_id三个字段
2.考虑到后期会对表字段扩充,先用Flask-Migrate对表进行了初始化“python hello.py db init”,执行后生成了migrations文件夹
3.比如在xx场景中,要求记录用户手机号,这时需要对User表增加phone字段,过程:
(1)更改hello.py的User表模型,增加phone字段
class User(db.Model):
......
id = ......
username=......
role_id =......
# 这是新增的phone字段
phone = db.Column(db.String(64))
(2)创建迁移脚本
$ python hello.py db migrate -m "add column phone"
你可以进migrations/version/XXXXXXadd column phone.py这个文件,看到upgrade函数里有了增加字段的sql语句,说明迁移脚本创建成功了
(3) 更新数据库
$ python hello.py db upgrade
4.查下User表结构,字段被增加进去了,且对原数据没影响
-----------------------------------------------------------------------------------------------------------------------------------