У меня есть Flask API, который потребляет sql операторов с SQL alchemy
Мой желаемый маршрут будет выглядеть так
http://127.0.0.1:5000/age/role/2019/?role=JW&role=BO
, который должен выглядеть примерно так
api.add_resource(FilterData, '/<axis_choice>/<legend_choice>/<year_choice>/?<filter_choice>=<filter_value>')
Маршрут уже на полпути, но кажется, что он возвращает всю таблицу со всеми ролями, а не только с JW
и BO
Полный класс выглядит так
class FilterData(Resource):
@cors.crossdomain(origin='*')
def get(self, axis_choice, legend_choice, year_choice, filter_value, filter_choice):
query = select([getattr(workers.c, axis_choice),
getattr(workers.c, legend_choice),
func.count(workers.c.id).label('count')])
query = query.where(getattr(workers.c, filter_choice).in_((filter_value,)))
query = query.where(workers.c.year == year_choice)
query = query.group_by(getattr(workers.c, legend_choice), getattr(workers.c, axis_choice))
with db_connect.connect() as connection:
result = connection.execute(query)
return jsonify({'data': [dict(row) for row in result if all(v is not None for v in row.values())]})
Current Output :
{
"data": [
{
"age": 56,
"count": 15,
"role": "JW"
},
{
"age": 49,
"count": 544,
"role": "BO"
},
{
"age": 55,
"count": 695,
"role": "BO"
},
{
"age": 22,
"count": 1114,
"role": "JW"
},
{
"age": 61,
"count": 12,
"role": "SW"
},
{
"age": 30,
"count": 90,
"role": "SP"
},
]
}
Expected output:
{
"data": [
{
"age": 56,
"count": 15,
"role": "JW"
},
{
"age": 49,
"count": 544,
"role": "BO"
},
{
"age": 55,
"count": 695,
"role": "BO"
},
{
"age": 22,
"count": 1114,
"role": "JW"
},
]
}
Где я ошибаюсь?