TableNameGetter
类描述器源码
class AnyClass(sa.orm.DeclarativeBase):
__tablename__ = TableNameGetter()
val: sa.orm.Query[AnyClass] = AnyClass.query
__tablename__
属性的访问器。
按照以下方式使用该描述器:
class Base(sa.orm.DeclarativeBase):
__tablename__ = TableNameGetter()
class NewModel(Base): ...
或按以下方式亦可:
class NewModel(Base):
__tablename__ = TableNameGetter()
它将会
- 阻止用户修改模型实例的
__tablename__
。 - 若未显式定义表名称,则返回一个自动合成的表名称。
提示
你可能并不需要使用该描述器,因为以下代码具有等价的效果。这种用法同时也是sqlalchemy
所建议的:
class AnyClass(sa.orm.DeclarativeBase):
@declared_attr.directive
def __tablename__(cls) -> str:
return fsc.utilities.TableNameGetter.calc_auto_table_name(cls.__name__)
别名
该类可以按以下方式之一获取
import flask_sqlalchemy_compat as fsc
fsc.TableNameGetter
fsc.utilities.TableNameGetter