SQLAlchemy 对类的多个身份进行多态

2023-12-29

我正在尝试使用 SQLAlchemy 实现单表继承。 根据 SQLAlchemy 官方文档(此处:官方文档 https://docs.sqlalchemy.org/en/latest/orm/inheritance.html), 分配方法single多态同一性,如下:

class Employee(Base):
    __tablename__ = 'employee'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    type = Column(String(50))

    __mapper_args__ = {
        'polymorphic_identity':'employee',
        'polymorphic_on':type
    }

我想分配multiple单个类的身份。例如:

 class Employee(Base):
    __tablename__ = 'employee'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    type = Column(String(50))

    __mapper_args__ = {
        'polymorphic_identity':'employee',
        'polymorphic_on':type
    }

class Manager(Employee):
    manager_name = Column(String(30))

    company_id = Column(ForeignKey('company.id'))
    company = relationship("Company", back_populates="managers")

    __mapper_args__ = {
        'polymorphic_identity': ['manager', 'ceo'], 
    }

请注意以下行:

'polymorphic_identity': ['manager', 'ceo']

这条线是不可能的(不幸的是)。

我想知道是否有任何方法可以将多个多态身份分配给单个类。 不幸的是我在文档中找不到任何类似的例子。


我知道这个问题早已得到解答,但这是另一种选择。

The polymorphic_on还可以采取case根据文档

https://docs.sqlalchemy.org/en/13/orm/mapping_api.html#sqlalchemy.orm.mapper.params.polymorphic_on https://docs.sqlalchemy.org/en/13/orm/mapping_api.html#sqlalchemy.orm.mapper.params.polymorphic_on

所以每个班级仍然只有1polymorphic_identity但在polymorphic_on您可以将多个值映射到同一身份。

在你的情况下,它可能看起来像:

 class Employee(Base):
    __tablename__ = 'employee'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    type = Column(String(50))

    __mapper_args__ = {
        'polymorphic_identity':'employee',
        "polymorphic_on":case(
            [
                (type == "manager", "manager"),
                (type == "ceo", "manager"),
            ],
            else_="employee"
         )
    }


class Manager(Employee):
    manager_name = Column(String(30))

    company_id = Column(ForeignKey('company.id'))
    company = relationship("Company", back_populates="managers")

    __mapper_args__ = {
        'polymorphic_identity': 'manager', 
    }

我没有尝试过in或 SQLAlchemy 的.in_

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLAlchemy 对类的多个身份进行多态 的相关文章

随机推荐