我正在重组Flask应用程序以使用蓝图和应用工厂。我已阅读使用Application Factories的文档: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'
答案 0 :(得分:0)
我遇到了导致KeyError的模型导入问题。我已经将模型的导入延迟到了我在视图函数中所需的位置 -
@blueprint.route('/some_route', method('GET','POST')
def some_route():
from blueprint.path.models import TabObj
return str(db.session.query(db.func.count(TabObj.colname)).scalar())