Python 烧瓶和炼金术课程
我一直在构建一个flask应用程序,并使用flask sqlalchemy和flask migrate。 最近,我决定用普通的sqlalchemy和alembic替换扩展,我开始思考存储db会话对象(sqla)的最佳位置 现在我有以下几点:Python 烧瓶和炼金术课程,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我一直在构建一个flask应用程序,并使用flask sqlalchemy和flask migrate。 最近,我决定用普通的sqlalchemy和alembic替换扩展,我开始思考存储db会话对象(sqla)的最佳位置 现在我有以下几点: Base = declarative_base() def init_db_session(app, expire_on_commit=True): """ Initialize the database """ engi
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 globalg是否更好
它们都属于同一个上下文,我在文档和代码中读到了这一点,但仍然无法理解在当前应用程序中使用它与在g中使用它的实际区别和潜在缺点,因此建议在模块范围内声明会话。这也是我在自己的代码中使用它的方式
Base = declarative_base()
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()
def init_db():
""" not much to do here if migrations are handled else where. """
pass
def init_app(app):
"""
Flask app initialization and bootstrap
"""
init_logging(app)
app.celery = init_celery(app)
app.db_session = init_db_session(app)