Flask-Script&FLask-Migrate

Posted fengzi759

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask-Script&FLask-Migrate相关的知识,希望对你有一定的参考价值。

  1. Flask-Script详解 先使用venvScriptsactivate激活环境

    • Flask-Script的作用是通过命令行的形式来操作Flask。列如通过命令跑一个开发版本的服务器、设置数据库,定时任务等 要使用Flask-Script。首先看一个最简单的列子

      • + manage.py
        + from flask_script import Manager
        + from your_app import app
        + manager = Manager(app)
        + @manager.command
        + def hello():
          + print("hello")
        + if __ name__ == __ main__:
          + manager.run()
      • 我们把脚本命令代码放在一个叫做manage.py文件中,然后再终端运行 python manage.py hello 命令, 就可以看到输出hello了

      • 定义命令的三种方法:

        • 1.使用@command装饰器: 这种方法之前已经介绍过。

        • 2.使用类继承自Command类

          • + from flask_script import Manager,Command
            + from your_app import app
            + manager = Manager(app)
            + @manager.command
            + class Hello(Commad):
              + "prints hello world"
              + def run(self):
                + print("hello world“)
            + manager.add_command(hello,Hello())
          • 使用类的方式,有三点需要注意

            • 必须继承自Command基类

            • 必须实现run方法

            • 必须通过add_command方法添加命令

        • 3.使用option装饰器: 如果想要再使用命令的时候还传递参数进去,那么使用@option装饰器更加的方便: 有几个参数就需要写几个‘option‘

          • + @manager.option(-n,--name,dest = name)
            + def  hello(name):
              + print(hello,name)
            + 这样调用hello命令
              + python  manage.py hello -n xt
              + 或者
              + python  manage.py  hello --name  xt
              + 就可以输出: hello xt
        • 如果有一些命令是针对某个功能的。比如有一堆命令是针对ORM与表映射的,那么可以将这些命令单独放在一个文件中方便管理。也是使用"Manager的对象来添加"。然后到主manage文件中,通过manager.add_command来添加 示例代码如下

          • db_script.py
            
            from flask_script import Manager
            
            db_manager = Manager()
            
            @db_manager.command
            
            def init():
            
            print("迁移仓库创建完毕!")
            
            manager.py
            
            from db_script import db_manager
            
            manager = Manager(app)
            
            manager.add_command("db",db_manager)
            
            那么以后可以再命令行终端通过 python manager.py db init 访问到db_script文件里面的init函数了
  2. Flask-Migrate详解

    • 在实际的开发环境中,经常会发生数据库修改的行为。一般我们修改数据库不会直接手动的去修改,而是去修改ORM对应的模型,然后再把模型映射到数据库中。这时候如果有一个工具能专门做这种事情。就显得非常有用了,而flask-migrate就是做这个事情的。flask-migrate是基于Alembic进行的一个封装,并集成到Flask中,而所有的迁移操作其实都是Alembic做的,他能跟踪模型的变化,并将变化映射到数据库中,但必须要把数据库导入到这个文件中

    • 要让Flask-Migrate能够管理app中的数据库,需要使用Migrate(app,db)来绑定app和数据库。示例代码如下

      • + 再manage.py中的代码
        + from app import app
        + from exts import db
        + from flask_migrate import  Migrate,MigrateCommand
        + from flask_script import Manager
        + #需要把映射到数据库中的模型导入到manage.py文件中
        + from models import User
        + manager = Manager(app)
        + #用来绑定app和db到flask_migrate的
        + Migrate(app,db)
        + 添加Migrate的所有子命令到db下
        + manager.add_commadd("db",MigrateCommand)
        + if __ name __ ==__ main__
          + manager.run()
    • Flask-Migrate常用命令

      • 1.初始化一个环境:python manager.py db init

      • 2.自动检测模型,生成迁移脚本 python manager.py db migrate

      • 3.将迁移脚本映射到数据库中 : python manager.py db upgrade

      • 4.更多命令 python manager.py db --help

以上是关于Flask-Script&FLask-Migrate的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Flask-Script 和 Gunicorn

02.flask-script

Flask:Flask-script插件

8---Flask-Script

使用 flask-script

Flask-Script模块