2016-11-14 2 views
0

Я следующий запросКак агрегировать расстояние в SQLAlchemy

query = Studio.query.join(
     Location 
    ).filter(
     func.ST_DWithin(Location.point, point, distance) 
    ).order_by(
     func.ST_Distance(Location.point, point).label('distance') 
    ) 

как агрегировать расстояние приписывать? например:

query[0].distance 

или

query[0].location.distance 
+0

Добавьте 'distance' к запрашиваемым столбцам/сущностям:' session.query (студия , func.ST_Distance (Location.point, point) .label ('distance')). join (Location). ... '. Тогда результаты будут не набором 'Studio', а кортежей' (Studio, distance) '. – van

+0

но как добавить в коллекцию студии? – CodeNinja

+0

После получения результатов вы можете сделать: 'для студии, расстояние в запросе: studio.distance = distance'. – van

ответ

0

Наконец я использую генератор, чтобы придать свойство

def smart_generator(query, column_name): 
    for obj, additional_data in query.all(): 
     setattr(obj, column_name, additional_data) 
     yield obj 


distance_query = StudioLocation.point.ST_Distance(point).label('distance') 
nearby_query = Location.point.ST_DWithin(point, distance) 
studio_query = db.session.query(Studio, distance_query).join(Location) 
studio_query = studio_query.filter(nearby_query).order_by('distance') 
studio = smart_generator(studio_query, "distance") 
Смежные вопросы