我一直在构建一个Flask应用,并使用Flask-SQLAlchemy和Flask-Migrate。最近,我决定用纯SQLAlchemy和Alembic替换扩展程序,然后开始思考存储数据库会话对象(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全局变量g会更好。
它们都属于同一个上下文,我在文档和代码中阅读了这方面的内容,但仍然不能理解在current_app中使用它与在g中使用它的实际区别和潜在缺点。