跳到主要内容

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()

它将会

  1. 阻止用户修改模型实例的__tablename__
  2. 若未显式定义表名称,则返回一个自动合成的表名称。
提示

你可能并不需要使用该描述器,因为以下代码具有等价的效果。这种用法同时也是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