使用应用程序工厂迁移 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.py、run.create_app、run:create_app(),但我仍然收到如上所示的错误。是什么导致了这个错误?
flask_migrate
将尝试使用来自 flask-script
的管理器,但前提是安装了 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>
的数据库命令。
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.py、run.create_app、run:create_app(),但我仍然收到如上所示的错误。是什么导致了这个错误?
flask_migrate
将尝试使用来自 flask-script
的管理器,但前提是安装了 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>
的数据库命令。