2012-02-05 75 views
9

萬一我有用戶模型和文章模型,用戶和文章是一對多的關係。所以我可以訪問這樣的文章如何限制/抵消sqlalchemy orm關係的結果?

user = session.query(User).filter(id=1).one() 
print user.articles 

但是,這將列出用戶的所有文章,如果我想限制文章到10?在軌道中有一個all()方法,它可以有限制/偏移量。在sqlalchemy中還有一個all()方法,但不帶參數,該如何實現?

編輯:

似乎user.articles[10:20]是有效的,但SQL沒有在查詢中使用10/20。所以實際上它會加載所有匹配的數據,並在python中過濾?

回答

11

解決方案是使用dynamic關係,如SQLAlchemy文檔的collection configuration techniques部分所述。

通過指定的關係爲

class User(...): 
    # ... 
    articles = relationship('Articles', order_by='desc(Articles.date)', lazy='dynamic') 

,那麼你可以寫user.articles.limit(10)將生成並執行一個查詢來獲取用戶的最後十篇文章。或者,如果您願意,可以使用[x:y]語法,該語法將自動生成LIMIT子句。

性能應該是合理的,除非您想要查詢過去10篇文章中的100個左右用戶(在哪個實例中至少有101個查詢將被髮送到服務器)。