我有这个代码和all()
方法以及其他所有方法都可以解决这个问题,而且我已经查看了所有方法,paginate()
方法BaseQuery
也适用于Query
{1}}
@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'
我到处寻找,我找不到任何解决办法。
答案 0 :(得分:19)
从你的问题......
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(...)