2017-09-21 13 views
0

flask_sqlalchemy 및 flask_restless를 사용하여 PostgreSQL 데이터베이스에서 데이터에 액세스하는 API 끝점을 만듭니다. flask-restless에서 다음 SQL 쿼리를 어떻게 구성합니까?플라스크 레스트리스에서 "group_by"SQL 쿼리를 생성하는 방법은 무엇입니까?

SELECT AVG("SpeedBand"), "Location" 
FROM public.traffic_data 
WHERE "RoadName"='ABC ROAD' 
GROUP BY "Location" 

이 모두에게 "ABC ROAD를"속하는 좌표 쌍 좌표의 각 쌍의 평균 속도 반환

avg | Location 
------------------------ 
1)'1.52' | 'X1 Y1 X2 Y2' 
2)'1.85' | 'X3 Y3 X4 Y4' 
------------------------ 

현재,이 쿼리 :

http://127.0.0.1:5000/api/traffic_data?q={"filters":[{"name":"RoadName","op":"==","val":"ABC ROAD"}]} 

반환 "ABC ROAD"에 속한 모든 데이터와 다른 시간에 모든 속도 데이터의 JSON 문자열 :

{ 
    "num_results": 26, 
    "objects": [ 
    { 
     "DateTime": "2017-09-07T19:25:37.035325", 
     "LinkID": "109002906", 
     "Location": "X1 Y1 X2 Y2", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 3, 
     "id": 34094 
    }, 
    { 
     "DateTime": "2017-09-07T19:25:37.035325", 
     "LinkID": "109002907", 
     "Location": "X3 Y3 X4 Y4", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 1, 
     "id": 38003 
    }, 
    { 
     "DateTime": "2017-09-13T09:57:07.163900", 
     "LinkID": "109002906", 
     "Location": "X1 Y1 X2 Y2", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 1, 
     "id": 92874 
    }, 
    { 
     "DateTime": "2017-09-13T09:57:07.163900", 
     "LinkID": "109002907", 
     "Location": "X3 Y3 X4 Y4", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 1, 
     "id": 96783 
    }, 
    { 
     "DateTime": "2017-09-13T09:57:07.163900", 
     "LinkID": "109002906", 
     "Location": "X1 Y1 X2 Y2", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 1, 
     "id": 114755 
    }, 
    { 
     "DateTime": "2017-09-13T09:57:07.163900", 
     "LinkID": "109002907", 
     "Location": "X3 Y3 X4 Y4", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 114756 
    }, 
    { 
     "DateTime": "2017-09-13T10:08:17.727949", 
     "LinkID": "109002906", 
     "Location": "X1 Y1 X2 Y2", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 151654 
    }, 
    { 
     "DateTime": "2017-09-13T10:08:17.727949", 
     "LinkID": "109002907", 
     "Location": "X3 Y3 X4 Y4", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 155563 
    }, 
    { 
     "DateTime": "2017-09-13T10:19:39.040191", 
     "LinkID": "109002906", 
     "Location": "X1 Y1 X2 Y2", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 210434 
    }, 
    { 
     "DateTime": "2017-09-13T10:19:39.040191", 
     "LinkID": "109002907", 
     "Location": "X3 Y3 X4 Y4", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 214343 
    }, 
    { 
     "DateTime": "2017-09-13T10:27:51.307349", 
     "LinkID": "109002906", 
     "Location": "X1 Y1 X2 Y2", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 269214 
    }, 
    { 
     "DateTime": "2017-09-13T10:42:36.724985", 
     "LinkID": "109002906", 
     "Location": "X1 Y1 X2 Y2", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 327994 
    }, 
    { 
     "DateTime": "2017-09-13T10:42:36.724985", 
     "LinkID": "109002907", 
     "Location": "X3 Y3 X4 Y4", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 331903 
    }, 
    { 
     "DateTime": "2017-09-13T10:42:36.724985", 
     "LinkID": "109002906", 
     "Location": "X1 Y1 X2 Y2", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 1, 
     "id": 349875 
    }, 
    { 
     "DateTime": "2017-09-13T10:42:36.724985", 
     "LinkID": "109002907", 
     "Location": "X3 Y3 X4 Y4", 
     "RoadName": "ABC ROAD", 
     "SpeedBand": 2, 
     "id": 349876 
    }, 

    . . . 


    ], 
    "page": 1, 
    "total_pages": 1 
} 
+0

해당 SQL을 정확하게 실행하기 위해 자체 엔드 포인트를 정의 할 수 없습니까? –

+0

동일한 쿼리를 SQLAlchemy 'result = session.query (func.avg (TrafficData.SpeedBand), TrafficData.Location) .group_by (TrafficData.Location) .filter (TrafficData.RoadName == 'ABC ROAD')에 쓸 수 있습니다. .all()' 어떻게 엔드 포인트에 써야합니까? [link] (https://flask-restless.readthedocs.io/en/stable/customizing.html) –

+0

당신은 그것을 방법으로 쓸 수 있습니다 ... https://flask-restless.readthedocs.io/en/ stable/customizing.html # custom-queries –

답변

0

그룹별로 다음과 같은 형식으로 feild를 지정해야합니다. GROUP_BY 형태의 개체 목록 :

{"field": <fieldname>} 

여기에서 그룹에 의해 사용되는 열 필드 명이다.

+1

어떻게 작동하는지 예제가 있습니까? 나는 다음의 {{ "필터": "{"name ":"RoadName ","op ":"== ","val ":"ABC ROAD "}],"group_by " ":"Location "}]}'그러나 ProgrammingError 응답을 얻습니다. –