2014-03-31 97 views
1

我有一個SQLAlchemy模型,說Entity,這有一個列is_published。如果我用id來查詢,我只想在is_published設置爲True時返回。我想我可以使用過濾器來實現。但是如果存在關係並且我能夠並且需要像another_model_obj.entity那樣訪問它並且我只想要這個給出相應的實體對象,如果該實例的is_published被設置爲True。我應該怎麼做?一個解決方案將使用一個if塊每次使用這個包裹。但是我多次使用它,如果再次使用它,我將不得不記住這些細節。有沒有什麼辦法可以在SQLAlchemy中實現這種自動化?或者還有其他更好的解決方案來解決這個問題嗎?謝謝如何在SQLAlchemy中執行此操作?

回答

2

它的內容,如果你需要一個連接:

session().query(AnotherModel).join(Entity).filter(Entity.is_published) 
+0

IIRC你甚至可以省略明確的'.join'和寫入......查詢(Entity,AnotherModel).filter(...)'。 – 9000

+1

你可能會這樣做,但然後AnotherModel實例將成爲結果集的一部分 – knitti

+0

當然,對於模型和服務文件中的東西,我使用類似這樣的東西。對於意見,我放棄404。但在一些不可避免的模板用法,我不能把一個完整的查詢,我該怎麼辦? – adarsh

0

這個問題在這裏問了很多次,仍然沒有一個很好的答案。 Here are SQLAlchemy作者建議的可能解決方案。一個更復雜的查詢類來排除未發佈的對象is provided in iktomi library。它僅適用於現在的SQLAlchemy 0.8。*分支,但應儘快移植到0.9。*。請參閱test cases以瞭解限制(失敗的測試用@unittest.skip()標記)和使用示例。