【问题标题】:OFFSET must not be negativeOFFSET 不能为负
【发布时间】:2015-09-28 00:24:39
【问题描述】:

当分页对象的结果为零时,我们强制?page=-1 然后我们会得到错误OFFSET must not be negative

-1 默认获取最后一页。

因此,如果您在 url 中添加该参数,则如果输出为空以进行分页,则始终会导致内部错误。

示例:

 page = request.args.get('page', 1, type=int)

 pagination = company.comments.order_by(Comment.timestamp.asc()).paginate(
        page, per_page=current_app.config['COMMENTS_PER_PAGE'],
        error_out=False)

这将避免错误,但总是让这种类型的验证来处理潜在的空分页很烦人。

 if company.comments.count() > 0:
      pagination = ...    
 else:
      pagination=None

我的问题是关于处理此特定内部服务器错误的最佳方法。

【问题讨论】:

  • 如果页面是
  • @RafaelBarros 使我需要始终执行类似于我的第二个示例的操作。如果有结果要分页,-1 很有用。
  • 那-1应该怎么做呢?
  • @RafaelBarros 一个特殊的页码,用于请求分页的最后一页

标签: python postgresql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

这可能是你想要做的,但 sqlalchemy 不会为你评估这个。

我的建议是自己计算页数,然后简单地减去一个。

from sqlalchemy import func

if page < 1:
    count = session.query(func.count(Comments.id)).scalar()
    comments_per_page = current_app.config['COMMENTS_PER_PAGE']
    page = count/float(comments_per_page) -1 # gets the last page

请注意,这是未经测试的。

【讨论】:

  • 我没有看到我的代码有任何优势。我正在寻找的是一种处理这种潜在错误的通用方法,而不是一些棘手的技巧。可能我应该在flask sql alchem的git中发布这个
  • 我认为该函数的 page 参数不支持像 python 列表那样的负索引。我理解你从哪里得到这个想法,我不同意你的观点,但由于不支持你必须自己处理。或者是的,在 github 上请求该功能并自己提出代码更改。
  • 显然这是一个真正的问题。 github.com/mitsuhiko/flask-sqlalchemy/issues/336
  • 当然,但这是在提出此问题后创建的一个最近的问题,没有先例。鉴于documentation,没有意图或提及支持负索引。我的观点是:这不是您正在使用的库上的错误,在实现所述功能之前,您必须处理您期望的特殊行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2023-02-23
相关资源
最近更新 更多