一尘不染

Flask SQLAlchemy分页错误

flask

我有这样的代码和all()方法,并在此所有其他方法作品和我都找过我所能,该方法paginate()适用于BaseQuery这也是Query

@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' 到处都是的错误,我找不到任何解决方案。


阅读 733

收藏
2020-04-07

共1个答案

一尘不染

从你的问题…

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

我认为这是你感到困惑的地方。“查询”是指SQLAlchemy Query对象。“ BaseQuery”是指Flask-SQLALchemy BaseQuery对象,它是的子类Query。此子类包括诸如first_or_404()和的帮助器paginate()。但是,这意味着Query对象不具有该paginate()功能。实际构建对象的方式称为“查询”对象,这取决于你处理的是Query还是BaseQuery对象。

在此代码中,你将获得SQLAlchemy Query对象,该对象将导致错误:

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

如果使用以下代码,则会得到所需的分页,因为你正在处理的是BaseQuery对象(来自Flask-SQLAlchemy)而不是Query对象(来自SQLAlchemy)。

models.Post.query.paginate(...)
2020-04-07