【问题标题】:Migrate "Manager" from Flask-Script to Flask CLI将“Manager”从 Flask-Script 迁移到 Flask CLI
【发布时间】:2021-10-16 16:22:27
【问题描述】:

我不太确定如何将这个简单的旧 Flask-Script ma​​nage.py 迁移到 Flask 0.11+ 中提供的 CLI

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

from app import app, db

migrate = Migrate(app, db)
manager = Manager(app)

manager.add_command('db', MigrateCommand)


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

这样使用,配合 Flask Migrate:

python manage.py db migrate

按照Flask 2.x documentation,我可以到达:

import click
from flask_migrate import Migrate, MigrateCommand

from app import app, db

@app.cli.command("db")
@click.argument("migration_command")
def handle_command(migration_command):
    print("Handling command {}".format(migration_command))

但是运行时:

python manage.py db migrate

但似乎从未调用过handle_command,并且db migrate 命令似乎没有运行。

另外,Flask CLI 等效于:

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

因为manager 不再可用?如果我将其替换为 app.run(),它似乎会忽略所有 CLI 参数,并且永远不会调用 handle_command

另外,MigrateCommand 怎么样:

manager.add_command('db', MigrateCommand)

我想是为db 创建一个可用命令的枚举?使用 Flask CLI 时,我在哪里传递 MigrateCommanddocumentation for Flask Migrate 并不清楚在使用 Flask CLI 时是否需要它。

【问题讨论】:

    标签: python flask


    【解决方案1】:

    我仍在努力让它工作,但我可以回答您的一些问题:

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

    这里,manager.run() 变成了 cli()

    if __name__ == "__main__":
        cli()
    

    在这样的命令中:

    python manage.py db migrate
    

    用flask到处替换python manage.py,比如'flask db migrate'等

    manager.add_command('db', MigrateCommand)
    

    在这里,用 cli 替换 manager。所以,上面的命令就变成了 cli.add_command(...)

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2018-12-07
      • 2013-07-04
      • 2016-04-30
      • 2019-02-04
      • 1970-01-01
      • 2020-03-15
      • 2014-01-25
      • 2014-09-14
      相关资源
      最近更新 更多