【问题标题】:SQLAlchemy returns unexpected results with limit/offsetSQLAlchemy 返回带有限制/偏移的意外结果
【发布时间】:2017-10-27 14:20:21
【问题描述】:

我有一个查询,它执行多个左连接,然后为分页目的执行限制/偏移。我的问题是限制/偏移似乎适用于执行所有连接后返回的 total 行数。我想要的是将限制/偏移量应用于我从查询中返回的 ORM 实例的数量。

这是一个示例查询:

result = session.query(A)\
.outerjoin(B)\
.outerjoin(C)\
.order_by(A.id)\
.offset(0).limit(100).all()

因此,如果 A 通过连接表 B 与 C 有一对多关系,我可能会在 A 中的每行得到 N 行。我需要做一些特别的事情,以便将限制/偏移量应用于 A 的计数实例而不是连接产生的行数?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    这就是 SQL 的工作原理。 This article 可能会对 SQL 语句中的操作顺序感兴趣。您可以在子查询中抵消和限制并加入。 Query.from_self() 在这种特殊情况下很方便,尤其是因为它会自动别名:

    result = session.query(A)\
        .order_by(A.id)\
        .offset(0).limit(100)\
        .from_self()\
        .outerjoin(B)\
        .outerjoin(C)\
        .all()
    

    【讨论】:

    • 你可以多解释一下这个案例以便更好地理解。
    猜你喜欢
    • 2013-12-23
    • 1970-01-01
    • 2018-04-08
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多