繁体   English   中英

使用应用程序工厂进行Flask迁移时出错

[英]Error on Flask-migrate with application factory

run.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()

manage.py

from flask_migrate import MigrateCommand, Manager

from run import create_app


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

当我运行时:python manage.py db init

Traceback (most recent call last):
  File "manage.py", line 6, in <module>
    manager = Manager(create_app())
TypeError: 'NoneType' object is not callable

当我运行时:flask db init

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_APP导出为run,run.py,run.create_app,run:create_app(),但仍然出现上述错误。 是什么导致此错误?

flask_migrate将尝试从flask-script使用管理器,但flask_migrate是已安装flask-script

简单地做,它应该起作用。 您也可以直接从flask_script导入。

pip install flask_script

manage.py

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-Migrate命令。 新方法使用Flask CLI,旧方法使用Flask-Script。 由于您似乎未安装Flask-Script,因此我假设您打算使用Flask CLI。

因此,您需要丢弃manage.py因为那仅适用于Flask-Script。 然后将您的application变量移至全局范围:

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_APP变量:

$ export FLASK_APP=run.py

现在,您应该能够使用flask run运行应用程序,并使用flask db <command> flask run数据库命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM