10

我有这个代码和all()方法,其他所有方法都适用于此,我已经查看了所有内容,我可以认为该方法也paginate()适用BaseQueryQuery

@app.route('/')
@app.route('/index')
@app.route('/blog')
@app.route('/index/<int:page>')
def index(page = 1):
    posts = db.session.query(models.Post).paginate(page, RESULTS_PER_PAGE, False)
return render_template('index.html', title="Home", posts=posts)

但这给了我AttributeError: 'Query' object has no attribute 'paginate' 到处都看过的错误,但我找不到任何解决方案。

4

1 回答 1

27

从你的问题...

that the method paginate() works on BaseQuery which is also Query

我认为这是您感到困惑的地方。“查询”指的是 SQLAlchemyQuery对象。“BaseQuery”指的是 Flask-SQLALchemyBaseQuery对象,它是Query. 该子类包括first_or_404()和等助手paginate()。然而,这意味着一个Query对象没有这个paginate()功能。您如何实际构建您称为“查询”对象的对象取决于您是在处理对象Query还是BaseQuery对象。

在此代码中,您将获得 SQLAlchemyQuery对象,这会导致错误:

db.session.query(models.Post).paginate(...)

如果您使用以下代码,您将获得您正在寻找的分页,因为您正在处理一个BaseQuery对象(来自 Flask-SQLAlchemy)而不是一个Query对象(来自 SQLAlchemy)。

models.Post.query.paginate(...)
于 2013-08-27T17:10:31.487 回答