0
我正在重構Flask應用程序以使用藍圖和應用程序工廠。我已閱讀使用應用程序工廠的文檔:Application Factories。但是,文檔似乎是手動創建模型。我想反映現有數據庫中的表格。我在反映發動機出現以下錯誤:使用應用程序工廠時反映數據庫引擎
RuntimeError: application not registered on db instance and no application bound to current context
我打電話db.init_app(app)
,然後使用應用程序上下文,調用create_all
創建我的模型。在這一點上,應用程序現在沒有數據庫引擎,它不是綁定到瓶子應用程序對象嗎?
__init__.py
:
from database import db
from flask import Flask
def create_app(config_file):
app = Flask(__name__)
app.config.from_pyfile(config_file)
db.init_app(app)
with app.app_context():
db.create_all()
return app
database.py
:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
models.py
:
from database import db
class Trailer(db.Model):
__table__ = db.Model.metadata.tables['tr_trailer']
***** UPDATE *****
我已經更新了應用程序以反映應用程序上下文中的引擎。
with app.app_context():
db.Model.metadata.reflect(db.engine)
db.create_all()
不過,現在我對我的表接收鍵錯誤:
__table__ = db.Model.metadata.tables['tr_trailer']
KeyError: 'tr_trailer'
您在應用上下文中未調用「反射」,因此當然它會抱怨說您不在應用上下文。您在上下文中調用了'create_all',對'reflect'執行相同的操作。 – davidism
你是對的。我沒有在上下文中調用反射。但是,現在我的桌子上出現keyError了。我已更新我的問題 – Jimmy
請[edit]創建[mcve]。 – davidism