使用应用程序工厂

时间:2016-02-29 20:48:40

标签: python flask sqlalchemy flask-sqlalchemy

我正在重组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'

1 个答案:

答案 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())