簡體   English   中英

Flask 和 SqlAlchemy 會話

[英]Flask and SqlAlchemy session

我一直在構建一個燒瓶應用程序並使用燒瓶 sqlalchemy 和燒瓶遷移。 最近我決定用普通的 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是否更好

它們都屬於同一上下文,我在文檔和代碼中閱讀了相關內容,但仍然無法理解與g相比在current_app中使用它的實際差異和潛在缺點

flask 文檔建議在模塊范圍內聲明會話。 這也是我在自己的代碼中使用它的方式。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM