Я пытаюсь создать глобальный сеанс с Flask -SQLAlchemy перед запросом и обработать его после запроса.
Сначала у меня есть фабрика приложений
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
if "FLASK_CONFIG" in os.environ:
app.config.from_envvar("FLASK_CONFIG")
db.init_app(app)
return app
У меня нет действительно понимаю, что делает db.init_app. Я знаю, что это инициализирует БД, но что это значит? Как я могу использовать его в приложении?
Итак, я создал некрасивую вещь после создания приложения:
from flask import g
from app_factory import *
app = create_app()
@app.before_request
def createSession():
if 'db' not in g:
g.db = db
@app.teardown_appcontext
def closeSession():
db = g.pop('db', None)
if db is not None:
db.close()
В этом случае я не понимаю, почему db.init_app необходимо, потому что я, вероятно, не использую это таким образом. Я могу видеть в приложении объект, есть расширение вкл. sqlalchemy, где хранится объект БД, но я не могу получить к нему легкий доступ.
Когда я вставляю записи в БД, я просто использую
g.db.session.add(whatever_db_object)
снова и снова в разных модулях и когда запрос заканчивается хорошо (200), я использую
g.db.session.commit()
Это работает, но я чувствую, что это не путь к go. Не могли бы вы дать мне несколько советов о некоторых лучших практиках в этой теме c?
Заранее спасибо.