SQL Алхимическая динамика c маршрут не фильтруется правильно - PullRequest
0 голосов
/ 30 марта 2020

У меня есть 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"
        },
    ]
}

Где я ошибаюсь?

...