【发布时间】:2026-01-22 05:20:04
【问题描述】:
我在我的 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 的记录,但分页并未中断。
有什么想法吗?谢谢!
【问题讨论】:
标签: python sqlalchemy pyramid