2013-08-27 87 views
6

我有這樣的代碼和all()方法和所有其他方法適用於這一點,我到處都找過我能上BaseQuerypaginate()工作的方法,這也是Query瓶SQLAlchemy的分頁錯誤

@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' 我到處尋找,我找不到任何解決方案。

回答

18

從你的問題......

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

我覺得這是你被迷惑在哪裏。 「查詢」是指SQLAlchemy Query對象。 「BaseQuery」是指Flask-SQLALchemy對象,它是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(...) 
+1

感謝這工作!我確實在兩者之間感到困惑。這爲我清理了:) – adarsh