资讯专栏INFORMATION COLUMN

7.ORM与SQLAlchemy (3) - flask-migrate数据库迁移

wind3110991 / 2296人阅读

摘要:听上去是不是很麻烦更糟糕的是,原先数据库的的数据也就没有了。此外,我们还将结合一起使用,简单来说让我们可以使用命令行去完成数据库迁移的操作。

在上一遍文章中,我们增加了两个模型QuestionsComments,并为Users增加了avatar_path这个字段,然后通过这段代码更新到数据库:

with app.test_request_context():
    db.drop_all()
    db.create_all()

因为当使用过db.create_all()之后,再次直接使用db.create_all(),对模型的修改并不会更新到数据库,我们要使用db.drop_all()先把数据库中所有的表先删除掉,然后再db.create_all()一次。听上去是不是很麻烦?更糟糕的是,原先数据库的的数据也就没有了。所以我们不用这种简单粗暴的方式去更新数据库结构,而是借助flask-migrate这个专门用于迁移数据库的工具,它可以在保留数据库原始数据的情况下,完成模型的更新。此外,我们还将结合flask-script一起使用,简单来说flask-script让我们可以使用命令行去完成数据库迁移的操作。


在项目主文件夹下新建一个manage.py,代码如下:

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from HarpQA import app, db
from models import Users, Questions, Comments

manager = Manager(app)

migrate = Migrate(app, db)

manager.add_command("db", MigrateCommand)


if __name__ == "__main__":
    manager.run()

首先导入相关的类,注意模型要全部导入过来,即使代码中并没有显式地使用它们。然后传入appdb来构建ManagerMigrate两个类的实例,最后将MigrateCommand的命令加入到manager中。


此时我们假设要更新模型的结构,在models.pyUser模型结尾添加一行代码test = db.Column(db.Integer),然后点击PyCharm下方的Terminal,自动进入到了虚拟环境的命令行中,输入python manage.py db init来初始化,这一步主要是建立数据库迁移相关的文件和文件夹,只是在第一次需要使用。接着依次使用python manage.py db migratepython manage.py db upgrade,待运行完成,查看users_infor表的结构,结果如下:

可以看到test字段已经添加到表中了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41257.html

相关文章

  • Flask之扩展flask-migrate

    摘要:一个用来做数据迁移的扩展,一般都是结合使用,在上一篇文章中我也介绍了这个扩展,需要的小伙伴可以看一下,后续我会将更深层的写出来。 flask-migrate一个用来做数据迁移的falsk扩展,一般都是结合flask-sqlalchemy使用,在上一篇文章中我也介绍了这个扩展,需要的小伙伴可以看一下,后续我会将flask-sqlalchemy更深层的写出来。【config.py】 SQL...

    Snailclimb 评论0 收藏0
  • Flask Web Development —— 据库(下)

    摘要:命令需要注册回调函数来将对象添加到导入列表。创建迁移脚本在,数据库迁移工作由迁移脚本完成。函数实施数据库更改,是迁移的一部分,函数则删除它们。另一方面,自动迁移通过寻找模型定义和数据库当前状态间的不同为和生成代码。 9、数据库在视图函数中的使用 在前面章节描述的数据库操作是可以在视图函数中直接使用的。示例5-5展示的新版本主页实现了用户输入名字并保存到数据库中。 示例5-5. he...

    jone5679 评论0 收藏0
  • Flask Web Development —— 据库(下)

    摘要:命令需要注册回调函数来将对象添加到导入列表。创建迁移脚本在,数据库迁移工作由迁移脚本完成。函数实施数据库更改,是迁移的一部分,函数则删除它们。另一方面,自动迁移通过寻找模型定义和数据库当前状态间的不同为和生成代码。 9、数据库在视图函数中的使用 在前面章节描述的数据库操作是可以在视图函数中直接使用的。示例5-5展示的新版本主页实现了用户输入名字并保存到数据库中。 示例5-5. he...

    fasss 评论0 收藏0

发表评论

0条评论

wind3110991

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<