flask + sqlalchemy + flask-script + flask-migrate

flask :  Flask 是一个 Python 实现的 Web 开发微框架,这里就不详细介绍了

推荐官网http://flask.pocoo.org/


sqlalchemy :  SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。https://www.sqlalchemy.org/官网介绍和使用说明很详细


Flask Script :  扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开;

Flask Script和Flask本身的工作方式类似,只需定义和添加从命令行中被Manager实例调用的命令;

官方文档:http://flask-script.readthedocs.io/en/latest/


flask-migrate :  Flask-Migrate是一个扩展,使用Alembic处理Flask应用程序的SQLAlchemy数据库迁移。数据库操作通过Flask命令行界面或Flask-Script扩展提供


可能有人会问,为什么要使用flask-script和flask-migrate 这两个看似复杂的东西,直接在Model.py文件里生成db对象,直接调用下面这两行命令不是更方便吗?

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)

db = SQLALchemy()
db.init_app(app) # 延迟导入app

class User(db.Modell):
    """
    这里是各种建表的类,就不写了
    """
    pass


if "__name__" == "__main__"

    db.drop_all() # 删除所有表
    db.create_all() # 创建所有表

这样也是一种方法,可是这种写法 到后期是很费力的

为什么呢?

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

更重要的一点是,flask-migrate会像git一样对你的表 进行版本管理,你可以指定版本号去选择版本 upgrade or downgrade

下面我会把我自己写的练习代码的 架构贴在下面,供参考,希望提出宝贵意见,感谢观看!

flask + sqlalchemy + flask-script + flask-migrate_第1张图片

下面我把manage.py写下来

#  coding = utf8
# @Email   : [email protected]
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import app, db


manager = Manager(app)

migrate = Migrate(app, db)

manager.add_command('db', MigrateCommand)


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

如果对你有帮助的话,欢迎点赞和评论哦!thanks

 

接下来就是我自己记录的代码了,跟标题无关,是蓝图的使用

flask + sqlalchemy + flask-script + flask-migrate_第2张图片

flask + sqlalchemy + flask-script + flask-migrate_第3张图片

flask + sqlalchemy + flask-script + flask-migrate_第4张图片



你可能感兴趣的:(flask,flask,flask,migrate,蓝图,flask)