SQLAlchemy - 查询多个表并返回嵌套对象

假设我们在 Company 和 Employee 之间有一个简单的一对多关系,有没有办法查询所有公司并在每个公司的属性中都有一个员工列表?


class Company(Base):

    __tablename__ = 'company'


    id = Column(Integer, primary_key=True)

    name = Column(String)



class Employee(Base):

    __tablename__ = 'employee'


    id = Column(Integer, primary_key=True)

    first_name = Column(String)

    last_name = Column(String)

    company_id = Column(Integer, ForeignKey(Company.id))

我正在寻找这样的东西:


>>> result = db.session.query(Company).join(Employee).all()

>>> result[0].Employee

[<Employee object at 0x...>, <Employee object at 0x...>]

结果的大小应与公司表中的行数相同。


我尝试了以下方法,它提供了对象元组(这是有道理的)而不是好的父/子结构:


>>> db.session.query(Company, Employee).filter(Company.id = Employee.company_id).all()

将其转换为我想要的对象结构并不难,只是想看看是否有任何捷径。


慕妹3146593
浏览 423回答 2
2回答

月关宝盒

您必须在父类中配置关系:class Company(Base):&nbsp; &nbsp; __tablename__ = 'company'&nbsp; &nbsp; id = Column(Integer, primary_key=True)&nbsp; &nbsp; name = Column(String)&nbsp; &nbsp; employees = relationship('Employee', lazy='joined') # <<< Add this line然后你可以在没有连接的情况下查询它:companies = session.query(Company).all()print(companies[0].employees)文档:https : //docs.sqlalchemy.org/en/13/orm/loading_relationships.html

慕慕森

你可以这样做:class Company(Base):&nbsp; &nbsp; __tablename__ = 'company'&nbsp; &nbsp; id = Column(Integer, primary_key=True)&nbsp; &nbsp; name = Column(String)&nbsp; &nbsp; employees = db.session.query(Company, Employee).filter(Company.id = self.id).all()&nbsp; &nbsp; self.employee_list = ['{0} {1}'.format(c.first_name, c.last_name) for c in employees]然后你可以访问员工姓名 Company.employee_list[0]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python