如何使用额外的方法扩展SQLAlchemy绑定的声明性模型?

2024-06-01 06:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我在模块a上有一个声明类:

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    addresses = relationship("Address", backref="user")

现在,在模块b中,我想使用映射的实体,但是添加一个方法:

from a import User

class UserWithExtraMethod(User):
    def name_capitalized(self):
        return self.name.capitalize()

user = UserWithExtraMethod()
print(user.name_capitalized)

但是,当我运行脚本时,会出现以下错误:

InvalidRequestError: Multiple classes found for path "User" in the registry of this declarative base. Please use a fully module-qualified path.

我在声明用户实体时遗漏了什么?我想重用先前声明的实体。

我想会是这样的:

class UserWithExtraMethod(User):
    ___magic_reuse_previous_mapper__ = True

    def name_capitalized(self):
        return self.name.capitalize()

Tags: 模块nameself实体true声明returndef