Flask SQLAlchemy分页错误

ada*_*rsh 7 python pagination flask flask-sqlalchemy

我有这个代码,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)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*eth 20

从你的问题......

that the method paginate() works on BaseQuery which is also Query
Run Code Online (Sandbox Code Playgroud)

我认为这是你感到困惑的地方."Query"指的是SQLAlchemy Query对象."BaseQuery"指的是Flask-SQLALchemy BaseQuery对象,它是的子类Query.这个子类包括诸如first_or_404()和的助手paginate().但是,这意味着Query对象没有该paginate()功能.实际构建调用"查询"对象的对象的方式取决于您是处理对象Query还是BaseQuery对象.

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

db.session.query(models.Post).paginate(...)
Run Code Online (Sandbox Code Playgroud)

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

models.Post.query.paginate(...)
Run Code Online (Sandbox Code Playgroud)