10

私はこのコードと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' しかし、これにより、どこでも見たエラーが発生し、これに対する解決策が見つかりません。

4

1 に答える 1

27

ご質問から...

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

これはあなたが混乱しているところだと思います。Query「クエリ」は SQLAlchemyオブジェクトを指します。BaseQuery「BaseQuery」は、 のサブクラスである Flask-SQLALchemy オブジェクトを指しますQueryfirst_or_404()このサブクラスには、やなどのヘルパーが含まれますpaginate()。ただし、これはQueryオブジェクトに機能がないことを意味しpaginate()ます。Query「クエリ」オブジェクトと呼んでいるオブジェクトを実際に構築する方法は、オブジェクトまたはオブジェクトのどちらを扱っているかによって異なりBaseQueryます。

このコードでは、SQLAlchemyQueryオブジェクトを取得しているため、エラーが発生します。

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

BaseQuery次のコードを使用すると、(SQLAlchemyの) オブジェクトではなく (Flask-SQLAlchemy の) オブジェクトを扱っているため、探しているページネーションが得られますQuery

models.Post.query.paginate(...)
于 2013-08-27T17:10:31.487 に答える