首页 > 解决方案 > SqlAlchemy 作为烧瓶扩展 vs 单独的数据库连接类(SqlAlchemy vs Flask-SqlAlchemy)

问题描述

您对使用 SqlAlchemy 与 Flask-SqlAlchemy 有何看法。

我正在使用一个单独的 Singleton Databse 类并单独运行 alembic 命令,但我想知道 Flask-SqlAlchemy 带来了什么并且值得。

Base = declarative_base()
class DatabaseManager(metaclass=Singleton):

    def __init__(self):
        self.engine = self.__get_engine()

        self.__import_entities()
        Base.metadata.create_all(self.engine)

        self.session_factory = sessionmaker(bind=self.engine)

    @staticmethod
    def get_db_string():
        # db string constructs here
        return db_string

    def __get_engine(self):
        connect_string = self.get_db_string()
        engine = create_engine(connect_string, echo=False, isolation_level='SERIALIZABLE', pool_recycle=3600)
        return engine

    @staticmethod
    def __import_entities():
        # import all the models

    @staticmethod
    def safe_commit(session):
        try:
            session.commit()
        except Exception as e:
            session.rollback()
            session.flush()

    def get_session_factory(self):
        return self.session_factory

我将会话作为烧瓶范围的会话从模块文件导入到我想要的任何地方,并使用安全的提交方法提交,当然session.remove还有请求结束。

def generate_flask_scoped_sqlalchemy_session():
    return flask_scoped_session(DatabaseManager().get_session_factory(), flask_app)


session = generate_flask_scoped_sqlalchemy_session()

我想知道这两种方法的优缺点以及最佳实践是什么。

标签: pythonflasksqlalchemyalembic

解决方案


推荐阅读