我有这样的代码和all()方法,并在此所有其他方法作品和我都找过我所能,该方法paginate()适用于BaseQuery这也是Query
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' 到处都是的错误,我找不到任何解决方案。
AttributeError: 'Query' object has no attribute 'paginate'
从你的问题…
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对象。
“ BaseQuery”
Flask-SQLALchemy BaseQuery
first_or_404()
在此代码中,你将获得SQLAlchemy Query对象,该对象将导致错误:
db.session.query(models.Post).paginate(...)
如果使用以下代码,则会得到所需的分页,因为你正在处理的是BaseQuery对象(来自Flask-SQLAlchemy)而不是Query对象(来自SQLAlchemy)。
models.Post.query.paginate(...)