2011-10-05 87 views
1

說我運行帶有過濾器的查詢,的Python,SQLAlchemy的:查詢,過濾器和返回值

Session.query(model.Place).join(model.Location).filter(model.Location.great_circle_distance(location) < r) 

爲了得到這個查詢的結果,它必須具有計算model.Location.great_circle_distance(location)。運行此查詢後,我可以得到一個與great_circle_distance小於r的標準匹配的列表Places,但是,是否有任何方法可以一次性返回與該查詢匹配的計算結果和地址列表一舉?

+0

是'great_circle_distance(location)'您添加到位置模型的方法嗎?是'location'和'r'是在查詢行之前定義的局部變量? – jdi

+0

是的,是的,是的。 – john

+2

是否有原因導致您無法在一行上執行great_circle_distance()調用,並且在下一個查詢中調用該調用的結果?似乎沒有必要嘗試制定一個將該值聚合到結果中的查詢命令。 – jdi

回答

0

您可以使用join,column_propertymapper來派生一個類,它本質上是一個數據庫視圖。但是,除非您打算在多個地方使用它,或者行數很大,否則我只需執行單獨的查詢即可獲取Location對象並使用map來計算圓距。

+0

你是什麼意思使用'map'來計算圓距?你能否詳細說明一下? – john

+0

如果您使用了兩個單獨的查詢,那麼您將查詢'model.Location'加入'model.Place'並檢索所有對象。然後,將這些對象「映射」到距離計算上以獲得所有距離。 – wberry