我的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的记录,但分页不会中断.
有什么想法吗?谢谢!
records = DBSession.query(GeneralLedger, ConsolidatedLedger).join(ConsolidatedLedger, GeneralLedger.invoiceId == ConsolidatedLedger.invoiceId).all()
应该工作,但我认为与记录工作时,你需要通过引用它们records.GeneralLedger
和records.ConsolidatedLedger
:
for record in records: print record.GeneralLedger print record.ConsolidatedLedger print record.GeneralLedger.foo # ...etc