Flask启动时错误处理(Migrate and context)

当数据库需要改变的时候,Flask-SQLAchemy从models文件中创建数据库表的时候,是在数据库表不存在的情况下新建,如果改变的话,只有通过删除原有旧的数据库表,但这样会导致原来数据的全部丢失。
比较好的解决办法是使用database migration框架,类似于一个版本控制工具,可以用来追踪源码文件的改变,即可以使用扩展库Flask-Migrate扩展。
安装

pip install flask-migrate

初始化方式

from flask_migrate import Migrate,MigrateCommand
migrate = Migrate(app,db)
manager.add_command('db',MigrateCommand)

则创建迁移库的时候可以通过命令

python hello.py db init

今天启动项目时出现了问题

sqlalchemy.exc.InvalidRequestError: Table 'users' is already defined for this MetaData instance.  Specify 'extend_existing=True' to redefine options and columns on an existing Table object.

初步怀疑没有构建迁移库造成的,然后照样例代码添加后依然报错,上网搜了下

网上搜到的解决方式:
在__tablename__下面加

__table_args__ = {'extend_existing': True}

然后又报错

RuntimeError: Working outside of application context.

解决方式:

在app/init.py文件中,修改:

def create_app(config_name):
	app=Flask(__name__)
	+with app.app_context():
		app.config.from_object(config[config_name])
		config[config_name].init_app(app)
		db.init_app(app)
		
		from app.api import api as api_blueprint
		app.register_blueprint(api_blueprint,url_prefix='/api/v1')

return app
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章