我正在尝试使用 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(使用前将#替换为@)