我通過散佈模型,藍圖來重新分解我的燒瓶應用程序,但我遇到運行時錯誤。當散射燒瓶模型時,RuntimeError:'未在db上註冊的應用程序'被提出
def create_app():
app = flask.Flask("app")
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
app.register_blueprint(api)
db.init_app(app)
db.create_all()
return app
我有以下問題(示例項目在這裏舉行:https://github.com/chfw/sample):
Traceback (most recent call last):
File "application.py", line 17, in <module>
app = create_app()
File "application.py", line 12, in create_app
db.create_all()
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 856, in create_all
self._execute_for_all_tables(app, bind, 'create_all')
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 836, in _execute_for_all_tables
app = self.get_app(app)
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 809, in get_app
raise RuntimeError('application not registered on db
'RuntimeError: application not registered on db
instance and no application bound to current context
我做了這個主題的研究。再保在這裏建議:
Flask-SQLAlchemy import/context issue
同樣的問題在這裏提出:
和上面的線(2010)提出這樣一個黑客:
app.register_blueprint(api)
db.app=app #<------------<<
db.init_app(app)
有沒有人知道如何正確地做到這一點?你是如何解決它的?
感謝
對,這是有效的。現在我沒有得到例外。但接下來是:「應用程序未註冊數據庫」 - > RuntimeError:應用程序未註冊數據庫實例,沒有應用程序綁定到當前上下文 – chfw
這裏的區別和添加db.app =應用程序? – user805981
@ user805981這種方式可能有效,但不是很乾淨。首先,你打破封裝,因爲SQLAlchemy上的'app'屬性並不是公開的。當它改變正在使用的應用程序時,該對象可能需要做其他事情。其次,'app_context'不僅僅是改變Flask-SQLAlchemy;它實際上告訴Flask更改當前的應用程序。因此,您可能需要使用各種Flask API來處理這些事情,或者與您的其他Flask擴展一起使用該應用程序。 –