我不太确定如何将这个简单的旧 Flask-Script manage.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()
Run Code Online (Sandbox Code Playgroud)
它是这样使用的,与 Flask Migrate 一起使用:
python manage.py db migrate
Run Code Online (Sandbox Code Playgroud)
按照Flask 2.x 文档,我可以获得:
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))
Run Code Online (Sandbox Code Playgroud)
但运行时:
python manage.py db migrate
Run Code Online (Sandbox Code Playgroud)
但它似乎handle_command
从未被调用,并且该db migrate
命令似乎没有运行。
另外,Flask CLI 的等效项是什么:
if __name__ == "__main__":
manager.run()
Run Code Online (Sandbox Code Playgroud)
既然manager
不再可用?如果我将其替换为app.run()
,它似乎会忽略所有 CLI 参数,并且handle_command
永远不会调用 。
MigrateCommand
另外,这个怎么样:
manager.add_command('db', MigrateCommand)
Run Code Online (Sandbox Code Playgroud)
我认为是创建可用命令的枚举db
?MigrateCommand
使用 Flask CLI 时要经过哪里?Flask Migrate 的文档并不清楚使用 Flask CLI 时是否需要它。
小智 1
我仍在努力让它发挥作用,但我可以回答您的一些问题:
if __name__ == "__main__":
manager.run()
Run Code Online (Sandbox Code Playgroud)
这里,manager.run() 变成了 cli()
if __name__ == "__main__":
cli()
Run Code Online (Sandbox Code Playgroud)
在这样的命令中:
python manage.py db migrate
Run Code Online (Sandbox Code Playgroud)
到处用flask替换python的manage.py,例如'flask db migrate'等。
manager.add_command('db', MigrateCommand)
Run Code Online (Sandbox Code Playgroud)
在这里,将 manager 替换为 cli。所以,上面的命令就变成了 cli.add_command(...)
归档时间: |
|
查看次数: |
2744 次 |
最近记录: |