2

运行.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()

管理.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(),但仍然出现上面显示的错误。是什么导致了这个错误?

4

2 回答 2

3

flask_migrate将尝试使用 Manager from flask-script,但前提flask-script是已安装。

简单地做,它应该工作。您也可以直接从flask_script.

pip install flask_script

管理.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)
于 2018-02-03T23:57:46.873 回答
2

有两种方法可以运行 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>

于 2018-02-04T06:52:20.953 回答