Я реструктурирую приложение для флэшей, чтобы использовать чертежи и заводы приложений. Я прочитал документацию для использования Заводов приложений по адресу: 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'
Вы не вызывая 'reflect' в контексте приложения, поэтому, конечно, он жалуется, что вы не в контекст приложения. Вы вызываете 'create_all' в контексте, делаете то же самое для' reflect'. – davidism
Вы правы. Я не призывал к размышлению в контексте. Однако теперь я получаю keyError на своем столе. Я обновил свой вопрос – Jimmy
Пожалуйста, отредактируйте [edit], чтобы создать [mcve]. – davidism