2016-02-29 2 views
0

Я реструктурирую приложение для флэшей, чтобы использовать чертежи и заводы приложений. Я прочитал документацию для использования Заводов приложений по адресу: Application Factories. Однако, как представляется, документация создается вручную. Я хочу отразить таблицы из существующей базы данных. Я получаю следующее сообщение об ошибке при отражающем двигателе:Отражайте двигатель db при использовании фабрики приложений

RuntimeError: application not registered on db instance and no application bound to current context 

Я звоню db.init_app(app), а затем с помощью контекста приложения, вызывая create_all создавать свои модели. На данный момент, не имеет ли приложение теперь db-движок и не связано ли оно с объектом-флеш-приложением?

__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'] 

***** ***** ОБНОВЛЕНИЕ

Я обновил приложение, чтобы отразить движок в контексте приложения.

with app.app_context(): 
     db.Model.metadata.reflect(db.engine) 
     db.create_all() 

Однако, теперь я получаю ключевые ошибки в моих таблицах:

__table__ = db.Model.metadata.tables['tr_trailer'] 
KeyError: 'tr_trailer' 
+0

Вы не вызывая 'reflect' в контексте приложения, поэтому, конечно, он жалуется, что вы не в контекст приложения. Вы вызываете 'create_all' в контексте, делаете то же самое для' reflect'. – davidism

+0

Вы правы. Я не призывал к размышлению в контексте. Однако теперь я получаю keyError на своем столе. Я обновил свой вопрос – Jimmy

+0

Пожалуйста, отредактируйте [edit], чтобы создать [mcve]. – davidism

ответ

0

У меня была такая же проблема с моделью импорта вызывает исключение KeyError. Я отложил импорт модели туда, где я требовал его функции Views -

@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())