2011-10-05 69 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