Я бы хотел использовать механизм фабрики приложений Flask для моего приложения.У меня есть то, что базы данных, которые я использую в некоторых чертежах, расположены по-разному, поэтому я использую привязки для указания на них.Сами таблицы находятся в рабочем состоянии и уже используются, поэтому мне нужно отразить их, чтобы использовать их в моем приложении.
Проблема в том, что я не могу заставить работать функцию отражения из-за контекста приложения.Я всегда получаю сообщение, что я работаю вне контекста приложения.Я полностью понимаю это и вижу, что БД действительно находится за пределами, но больше не имею представления о том, как его задействовать.
Я пробовал разные варианты передачи приложения через current_app в мой models.py, но ничегоработал.
config.py:
class Config(object):
#Secret key
SECRET_KEY = 'my_very_secret_key'
ITEMS_PER_PAGE = 25
SQLALCHEMY_BINDS = {
'mysql_bind': 'mysql+mysqlconnector://localhost:3306/tmpdb'
}
SQLALCHEMY_TRACK_MODIFICATIONS = False
main.py:
from webapp import create_app
app = create_app('config.Config')
if __name__ == '__main__':
app.run(debug=true)
webapp / init .py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app(config_object):
app=Flask(__name__)
app.config.from_object(config_object)
db.init_app(app)
from main import create_module as main_create_module
main_create_module(app)
return app
webapp / main / init .py:
def create_module(app):
from .controller import blueprint
app.register(blueprint)
webapp / main / controller.py:
from flask import Blueprint, render_template, current_app as app
from .models import db, MyTable # <-- Problem might be here ...
bluerint = Blueprint('main', __name__)
@blueprint.route('/'):
def index():
resp = db.session.query(MyTable)\
.db.func.count(MyTable.versions)\
.filter(MyTable.versions =! '')\
.group_by(MyTable.name).all()
if resp:
return render_template('index.html', respo=respo)
else:
return 'Nothing happend'
webapp / main /models.py:
from .. import db # <-- and here ...
db.reflect(bind='mysql_bind')
class MyTable(db.Model):
__bind_key__ = 'mysql_bind'
__table__ = db.metadata.tables['my_table']
Ожидаемый результат - заставить отражение работать в разных чертежах.