Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flask SQLAlchemy pagination error

I have this code and the all() method and every other method works on this and I have looked all over and I could that the method paginate() works on BaseQuery which is also 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)

but this gives me the error AttributeError: 'Query' object has no attribute 'paginate' I've looked everywhere and I can't find any solution to this.

like image 398
adarsh Avatar asked Aug 27 '13 14:08

adarsh


1 Answers

From your question...

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

I think this is where you're being confused. "Query" refers to the SQLAlchemy Query object. "BaseQuery" refers to the Flask-SQLALchemy BaseQuery object, which is a subclass of Query. This subclass includes helpers such as first_or_404() and paginate(). However, this means that a Query object does NOT have the paginate() function. How you actually build the object you are calling your "Query" object depends on whether you are dealing with a Query or BaseQuery object.

In this code, you are getting the SQLAlchemy Query object, which results in an error:

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

If you use the following code, you get the pagination you're looking for, because you are dealing with a BaseQuery object (from Flask-SQLAlchemy) rather than a Query object (from SQLAlchemy).

models.Post.query.paginate(...)
like image 147
Mark Hildreth Avatar answered Oct 27 '22 18:10

Mark Hildreth