Python 在sqlalchemy中,如何访问子查询中的匿名字段

Python 在sqlalchemy中,如何访问子查询中的匿名字段,python,sqlalchemy,polymorphism,subquery,anonymous,Python,Sqlalchemy,Polymorphism,Subquery,Anonymous,首先,我使用了Sqlalchemy的多态架构。 ChildA和ChildB扩展Child ChildA有name列 ChildB有年龄栏 所以我想从子查询中访问ChildA.name列。 类似subquery.c.ChildA.name=='Tom'如果我正确理解了您要做的事情,那么您实际上不需要子查询,它可以是 In [13]: f = session.query(Parent, ChildA).join(ChildA).first() print(f.ChildA.name) Pedro

首先,我使用了Sqlalchemy的多态架构。 ChildA和ChildB扩展Child

ChildA有name列

ChildB有年龄栏

所以我想从子查询中访问ChildA.name列。
类似subquery.c.ChildA.name=='Tom'

如果我正确理解了您要做的事情,那么您实际上不需要子查询,它可以是

In [13]:

f = session.query(Parent, ChildA).join(ChildA).first()
print(f.ChildA.name)

Pedro
对于子查询的使用,我建议您看看sqlalchemy

另一方面,我不能像您定义的那样使用这些类,我必须添加这样的ForeignKey

class ChildA(Child):
    __tablename__ = 'child_a'

    id = Column(Integer, ForeignKey('child.id'), primary_key=True)
    name = Column(String(50))

class ChildB(Child):
    __tablename__ = 'child_b'

    id = Column(Integer, ForeignKey('child.id'), primary_key=True)
    age = Column(Integer)
我毫不怀疑它对您有效,这可能取决于设置

最后,我建议您使用一个列来表示child的类型。这样,您就可以更容易地识别正在使用的孩子。像这样的,

class Child(Base):
    __tablename__ = 'child'

    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))
    parent = relationship(Parent, backref='children')
    type = Column(String(20))

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

class ChildA(Child):
    __tablename__ = 'child_a'

    id = Column(Integer, ForeignKey('child.id'), primary_key=True)
    name = Column(String(50))

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

class ChildB(Child):
    __tablename__ = 'child_b'

    id = Column(Integer, ForeignKey('child.id'), primary_key=True)
    age = Column(Integer)

    __mapper_args__ = {
        'polymorphic_identity':'child_b',
    }
请查看sqlalchemy了解详细信息

希望能有帮助

class Child(Base):
    __tablename__ = 'child'

    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))
    parent = relationship(Parent, backref='children')
    type = Column(String(20))

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

class ChildA(Child):
    __tablename__ = 'child_a'

    id = Column(Integer, ForeignKey('child.id'), primary_key=True)
    name = Column(String(50))

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

class ChildB(Child):
    __tablename__ = 'child_b'

    id = Column(Integer, ForeignKey('child.id'), primary_key=True)
    age = Column(Integer)

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