我有一个执行多个左连接的查询,然后为分页目的执行限制/偏移。我的问题是,限制/偏移似乎应用于执行所有连接后返回的总行数。我想要的是将限制/偏移应用于我从查询中返回的ORM实例的数量。
以下是一个示例查询:
result = session.query(A)\
.outerjoin(B)\
.outerjoin(C)\
.order_by(A.id)\
.offset(0).limit(100).all()
因此,如果A通过连接表B与C具有一对多的关系,那么我可能在A中每行得到N行。我需要做一些特殊的事情,以便对A的计数应用限制/偏移量实例而不是连接生成了多少行?
答案 0 :(得分:1)
这就是SQL的工作原理。关于SQL语句中的操作顺序的This article可能是有意义的。您可以在子查询中进行偏移和限制,并加入该子查询。 Query.from_self()
在这种特殊情况下很方便,特别是因为它会自动混叠:
result = session.query(A)\
.order_by(A.id)\
.offset(0).limit(100)\
.from_self()\
.outerjoin(B)\
.outerjoin(C)\
.all()