如何从SQLAlchemy JOIN中的两个表返回结果?

 拍友2702933273 发布于 2023-02-13 10:24

我的ORM中定义了两个表:

Base = declarative_base()

class GeneralLedger(Base):
  __tablename__ = 'generalledgers'
  id = Column(Integer, primary_key=True)
  invoiceId = Column(Integer)
  ..

class ConsolidatedLedger(Base):
  __tablename__ = 'consolidatedledgers'
  id = Column(Integer, primary_key = True)
  invoiceId = Column(Integer)

..

我没有在两个表之间设置任何关系.我按以下方式加入:

records = DBSession.query(GeneralLedger).join(ConsolidatedLedger, GeneralLedger.invoiceId == ConsolidatedLedger.invoiceId).all()

我也尝试过:

records = DBSession.query(GeneralLedger).filter(GeneralLedger.invoiceId == ConsolidatedLedger.invoiceId).all()

在这两种情况下,当我在视图中显示结果时,只显示GeneralLedger表中的条目.如何从同一结果集中的两个表中获取结果?我试过这个:

records = DBSession.query(GeneralLedger, ConsolidatedLedger).join(ConsolidatedLedger, GeneralLedger.invoiceId == ConsolidatedLedger.invoiceId).all()

但是,出于某种原因,当我在模板(Jinja2)中迭代结果时,列的值对于每一行都是空的.此外,当计数:

total = DBSession.query(GeneralLedger).join(ConsolidatedLedger, GeneralLedger.invoiceId == ConsolidatedLedger.invoiceId).count()

总行数是两个表中匹配记录的总和.我正在使用webhelpers.paginate来处理分页:

query = DBSession.query(GeneralLedger).join(ConsolidatedLedger, GeneralLedger.invoiceId == ConsolidatedLedger.invoiceId)
records = paginate.Page(query, current_page, url=page_url)

并且发送到模板的结果集就好像除了ConslidatedLedger表上的结果之外的所有结果都被删除了.例如,我的页面总数设置为20条记录.如果该页面上存在来自ConslidatedLedger的记录,则页面将被截断,仅显示来自GeneralLedger的记录,但分页不会中断.

有什么想法吗?谢谢!

1 个回答
  • records = DBSession.query(GeneralLedger, ConsolidatedLedger).join(ConsolidatedLedger, GeneralLedger.invoiceId == ConsolidatedLedger.invoiceId).all()
    

    应该工作,但我认为与记录工作时,你需要通过引用它们records.GeneralLedgerrecords.ConsolidatedLedger:

    for record in records:
        print record.GeneralLedger
        print record.ConsolidatedLedger
    
        print record.GeneralLedger.foo
        # ...etc
    

    2023-02-13 10:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有