Python 应用程序工厂迁移时出错

Python 应用程序工厂迁移时出错,python,flask,factory-pattern,flask-migrate,flask-cli,Python,Flask,Factory Pattern,Flask Migrate,Flask Cli,run.py manage.py db = SQLAlchemy() migrate = Migrate() def create_app(): app = Flask(__name__) db.app = app db.init_app(app) migrate.init_app(app, db) return app if __name__ == '__main__': application = create_app() appl

run.py

manage.py

db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)
    db.app = app
    db.init_app(app)
    migrate.init_app(app, db)
    return app

if __name__ == '__main__':
    application = create_app()
    application.run()
运行时:python manage.py db init

from flask_migrate import MigrateCommand, Manager

from run import create_app


manager = Manager(create_app())
manager.add_command('db', MigrateCommand)

我尝试将FLASK_APP导出为run,run.py,run.create_APP,run:create_APP(),但仍然出现上面显示的错误。导致此错误的原因是什么?

flask\u migrate
将尝试从
flask script
使用管理器,但仅当安装了
flask script

简单地做,它应该会起作用。您也可以直接从
flask\u脚本
导入

pip安装flask\u脚本

管理.py

Usage: flask db init [OPTIONS]

Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.

For more information see http://flask.pocoo.org/docs/latest/quickstart/

有两种方法可以运行Flask Migrate命令。较新的方法使用Flask CLI,较旧的方法使用Flask脚本。因为您似乎没有安装Flask脚本,所以我假设您打算使用Flask CLI

所以您需要扔掉
manage.py
,因为这只适用于Flask脚本。然后将
应用程序
变量移动到全局范围:

from flask_migrate import MigrateCommand
from flask_script import Manager
from run import create_app

app = create_app()
manager = Manager(app)
manager.add_command('db', MigrateCommand)
然后设置
FLASK\u应用程序
变量:

db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)
    db.app = app
    db.init_app(app)
    migrate.init_app(app, db)
    return app

application = create_app()

if __name__ == '__main__':
    application.run()
现在,您应该能够使用
flask run
运行应用程序,并使用
flask db
运行数据库命令

db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)
    db.app = app
    db.init_app(app)
    migrate.init_app(app, db)
    return app

application = create_app()

if __name__ == '__main__':
    application.run()
$ export FLASK_APP=run.py