私はflask_sqlalchemyとflask_restlessを使用して、PostgreSQLデータベースからデータにアクセスするAPIエンドポイントを作成しています。フラスコ不安定で次の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/ja/ stable/customizing.html#custom-queries –