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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章