Ошибка разбивки на страницы 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)

но это дает мне ошибку AttributeError: 'Query' object has no attribute 'paginate' Я везде искал и не могу найти решения этой проблемы.


person adarsh    schedule 27.08.2013    source источник


Ответы (1)


Из вашего вопроса...

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

Я думаю, здесь вы путаетесь. «Запрос» относится к объекту SQLAlchemy Query. . «BaseQuery» относится к объекту BaseQuery Flask-SQLALchemy. , который является подклассом Query. Этот подкласс включает вспомогательные функции, такие как first_or_404() и < a href="http://pythonhosted.org/Flask-SQLAlchemy/api.html#flask.ext.sqlalchemy.BaseQuery.paginate" rel="noreferrer">paginate(). Однако это означает, что объект Query НЕ имеет функции paginate(). То, как вы на самом деле строите объект, который вы называете своим объектом «Запрос», зависит от того, имеете ли вы дело с объектом Query или BaseQuery.

В этом коде вы получаете объект SQLAlchemy Query, что приводит к ошибке:

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

Если вы используете следующий код, вы получите нужное разбиение на страницы, потому что вы имеете дело с объектом BaseQuery (из Flask-SQLAlchemy), а не с объектом Query (из SQLAlchemy).

models.Post.query.paginate(...)
person Mark Hildreth    schedule 27.08.2013
comment
Спасибо, это сработало! Я действительно запутался между ними. Это прояснило для меня :) - person adarsh; 27.08.2013