为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3146593 2021-12-16 15:08:57
假设我们在 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()将其转换为我想要的对象结构并不难,只是想看看是否有任何捷径。
查看完整描述

2 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

您必须在父类中配置关系:


class Company(Base):

    __tablename__ = 'company'


    id = Column(Integer, primary_key=True)

    name = Column(String)

    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


查看完整回答
反对 回复 2021-12-16
?
慕慕森

TA贡献1856条经验 获得超17个赞

你可以这样做:


class Company(Base):

    __tablename__ = 'company'


    id = Column(Integer, primary_key=True)

    name = Column(String)


    employees = db.session.query(Company, Employee).filter(Company.id = self.id).all()

    self.employee_list = ['{0} {1}'.format(c.first_name, c.last_name) for c in employees]

然后你可以访问员工姓名 Company.employee_list[0]


查看完整回答
反对 回复 2021-12-16
  • 2 回答
  • 0 关注
  • 399 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号