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
}
해당 SQL을 정확하게 실행하기 위해 자체 엔드 포인트를 정의 할 수 없습니까? –
동일한 쿼리를 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) –
당신은 그것을 방법으로 쓸 수 있습니다 ... https://flask-restless.readthedocs.io/en/ stable/customizing.html # custom-queries –