我一直在构建一个烧瓶应用程序并使用flask-sqlalchemy和flask-migrate . 最近我决定用普通的sqlalchemy和alembic替换扩展,我开始认为什么是存储db会话对象(sqla)的最佳位置 .

现在我有以下内容:

Base = declarative_base()


def init_db_session(app, expire_on_commit=True):
    """
    Initialize the database
    """
    engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], convert_unicode=True)
    db_session = scoped_session(
        sessionmaker(autocommit=False, autoflush=False, expire_on_commit=expire_on_commit, bind=engine)
    )

    Base.query = db_session.query_property()

    return db_session

def init_app(app):
    """
    Flask app initialization and bootstrap
    """
    init_logging(app)
    app.celery = init_celery(app)
    app.db_session = init_db_session(app)

但是在网上给出了一些文档和例子,我想知道使用flask global g 是否更好

它们都属于相同的上下文,我在文档和代码中读到了这一点,但仍然无法理解实际差异以及在 current_app 中与 g 相比的潜在缺点