码迷,mamicode.com
首页 > 其他好文 > 详细

Flask-Script&FLask-Migrate

时间:2020-01-05 16:01:30      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:通过命令   containe   pre   数据库   类继承   contain   class   print   多命令   

  1. Flask-Script详解 先使用venv\Scripts\activate激活环境

    • 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

标签:通过命令   containe   pre   数据库   类继承   contain   class   print   多命令   

原文地址:https://www.cnblogs.com/fengzi759/p/12152479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!