Как я могу создать и использовать сеанс в контексте приложения с Flask -SQLAlchemy - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь создать глобальный сеанс с 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?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...