python - 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()
我想知道这两种方法的优缺点以及最佳实践是什么。
解决方案
推荐阅读
- javascript - 更新 x 轴 d3js
- informatica - Informatica PowerCenter Workflow - Windows 计算机上工作流会话中的平面文件路径
- prometheus - 如何在 Prometheus Grafana 中计算正常运行时间百分比或停机时间百分比
- flutter - 无法在颤动中向自定义底部导航添加操作
- javascript - Javascript 删除按钮
- javascript - 试图了解全局 javascript 变量的范围
- laravel - Laravel:投射一个数组并推送到它?
- r - 如何规范化 R 数据框中的所有变量(除了一个变量是一个因素)
- flutter - 如何在 Flutter 中跨应用程序重用昂贵的小部件?
- cassandra - 聚类键列必须与 CLUSTERING ORDER BY 指令中的列完全匹配