SQLAlchemyProxy
类源码
db_proxy = SQLAlchemyProxy[_SQLAlchemyLiteDB_co, _ModelLite_co](
db: _SQLAlchemyLiteDB_co,
model_class: type[_ModelLite_co],
)
flask_sqlalchemy.SQLAlchemy
的代理类。
该类是针对SQLAlchemy-Lite的封装。透过 调整flask_sqlalchemy_lite.SQLAlchemy
,来模拟flask_sqlalchemy.SQLAlchemy
的用法。
须知并非所有来自flask_sqlalchemy.SQLAlchemy
都能精准复刻。准确来说,该代理只完成了以下工作:
- 按照给定的初始化参数
model_class
,提供一个Model
类,其__tablename__
属性可以从model_class
自动推断。 - 提供一个假的
Query
类。该Query
类其实就是sqlalchemy.orm.Query
。换言之,其不会提供任何额外的功能。 - 提供一个假的
Table
类。这个假类实质上是一个创建sqlalchemy.Table
实例的工厂函数。使用该函数的好处是,用户可以略过提供metadata
的步骤。 - 像
flask_sqlalchemy.SQLAlchemy
那样,提供一个域内会话(scoped session)。该域内会话由该代理类的实例直接管理。 - 提供
flask_sqlalchemy.SQLAlchemy
的主要、基本的功能。用法完全等价,但具体的实现是透过flask_sqlalchemy_lite
完成的。 - 任何无法复刻的功能,都会抛出
NotImplementedError
。
若用户希望从Flask SQLAlchemy迁移到Flask SQLAlchemy-Lite,又不想过多地改动与对象关系映射(ORM)有关的代码,则可以考虑使用该封装。还有一种可用的场景,是用户主要使用Flask SQLAlchemy开发、却需要在某些特殊的部署条件下,使用Flask SQLAlchemy Lite。
别名
该类可以按以下方式之一获取
import flask_sqlalchemy_compat as fsc
fsc.SQLAlchemyProxy
fsc.flask_sa_api.SQLAlchemyProxy