首页 > 解决方案 > 选择具有 SQLAlchemy 继承的特定列

问题描述

使用 SQLAlchemy 文档中的示例进行继承,我将如何Employee仅查询所有派生类的idengineer_info列,包括那些没有该engineer_info列的类?

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 Engineer(Employee):
    __tablename__ = 'engineer'
    id = Column(Integer, ForeignKey('employee.id'), primary_key=True)
    engineer_info = Column(String(50))
    __mapper_args__ = {
        'polymorphic_identity':'engineer',
    }

class Manager(Employee):
    __tablename__ = 'manager'
    id = Column(Integer, ForeignKey('employee.id'), primary_key=True)
    manager_data = Column(String(50))
    __mapper_args__ = {
        'polymorphic_identity':'manager',
    }

标签: pythonsqlalchemy

解决方案


如果您在/连接中将employee表显式连接到表,看起来您可以执行此操作,例如:engineerleftouter

session.query(Employee.id, Engineer.engineer_info).join(Engineer, isouter=True).all()

或者:

session.query(Employee.id, Engineer.engineer_info).outerjoin(Engineer).all()

对于未来的可搜索性:另请参阅我通过谷歌搜索“sqlalchemy left join subclass”找到的所有列上的 SQLAlchemy 继承过滤器


推荐阅读