2009-12-29 54 views
1

我有三個在SQLAlchemy中定義並使用orm.mapper()映射的表(用戶,文章和標記)。正如你在下面看到的,我爲每篇文章添加了一個屬性「作者」,該文章將該文章與創建它的用戶關聯起來。使用SQLAlchemy檢索ORM屬性

orm.mapper(User, t_users) 
orm.mapper(Tag, t_tags) 
orm.mapper(Article, t_articles, properties={ 
    'author' : orm.relation(User), 
    'tags' : orm.relation(Tag, secondary=t_tags_articles), 
    }) 

我列出了一篇文章索引,每篇文章都需要顯示它的標籤及其作者。我試圖找出最好的方式(最小的SQL查詢,更好的性能)來檢索作者和標籤數據。

如果我這樣做:

results = Session.query(Article).all() 

然後我可以拉的作者和標籤索引中的每一篇文章是這樣的:

author = results[0].author 
tags = results[0].tags 

但這運行的每個結果的兩個新的查詢[ x]我循環(yikes)。如果我這樣做:

results = Session.query(Article, User).join('author').all() 

然後我可以訪問筆者的數據是這樣的(因爲它加入了):

firstname = results[0].firstname 

而是試圖讓標籤列表不工作,而是提出了一個AttributeError(「rowTuple」對象有沒有屬性「標籤」):

tags = results[0].tags 

我在做什麼錯的,什麼是訪問數據,該指標的最佳方式?

回答

3

考慮急於加載,如Working with Related Objects所述?

你的加入也很時髦。您將ORM與SQL工具包混合在一起,以便獲取行對象而不是映射對象。見Querying with Joins

+0

謝謝。這正是我需要的。 – Travis 2009-12-29 21:41:53