Как я могу вернуть вложенный json с помощью flask.jsonify, запросив базу данных?

0

Вот что моя схема таблицы базы данных

Movie (id, movie_name, genre, time, channel)

У меня есть таблица MySQL и хочу вернуть вложенный json в API, группируя их по жанру и каналу.

Например:

[
    'comedy': {
        [{'id': 1, 'movie_name': 'm1', 'time': 18:00, 'channel': 'c1'},
         {'id': 1, 'movie_name': 'm2', 'time': 18:00, 'channel': 'c2'}]
    },
    'horror': {
        [{'id': 1, 'movie_name': 'm3', 'time': 18:00, 'channel': 'c1'},
         {'id': 1, 'movie_name': 'm4', 'time': 18:00, 'channel': 'c2'}]
    }
]

И аналогично для каждого канала.

Обновление: я не использую SQL-Alchemy, все, что я делаю сейчас, это return jsonify(cursor.fetchall())

Теги:
python-3.x
flask

2 ответа

0

Вот еще один, более расширяемый подход:

columns_to_be_jsonified = ['id', 'movie_name', 'time']
genredict = {}

for movie in Movie.query.all():
    movietup = movie.genre, movie.channel
    moviedict = {}
    for column in columns_to_be_jsonified:
        moviedict[column] = getattr(movie, column)

    if movietup in genredict:
        genredict[movietup].append(moviedict)
    else:
        genredict[movietup] = [moviedict]

return jsonify(genredict)

Он возвращает

{('horror', 'channel1'): [{'id': 1, 'movie_name': 'it', 'time': '18:00'}, {'id': 2, 'movie_name': 'the ring', 'time': '20:00'}],
 ('comedy', 'channel2'): [...]}
  • 0
    Спасибо за ваше решение, но можете ли вы предложить мне альтернативное решение без использования SQL-Alchemy?
0

Предполагая, что вы используете SQLAlchemy ORM

comedies = []
horrors =[] #for lack of a better way to put it
all_movies = session.query(Movie)
for movie in all_movies:
   if movie.genre == 'comedy':
      comedy_entry ={'id':movie.id,
                      'movie_name':movie.movie_name,
                      'time':movie.time,
                      'channel': movie.channel }
      comedies.append(comedy_entry)
   if movie.genre == 'horror':
      horror_entry ={'id':movie.id,
                      'movie_name':movie.movie_name,
                      'time':movie.time,
                      'channel': movie.channel }
      horrors.append(horror_entry)

return jsonify({'comedy'= comedies, 'horror'= horrors})

Я надеюсь, что это поможет вам или, по крайней мере, даст вам отправную точку

  • 0
    Спасибо за ваше решение, но можете ли вы предложить мне альтернативное решение без использования SQL-Alchemy?
  • 0
    @SagunShrestha, пожалуйста, посмотрите этот ответ о том, как вы можете подключиться к базе данных MySQL. Ответ 3 выглядит лучше всего, если вы не хотите использовать SQLAlchemy. Результат становится тем, что вы повторяете (эквивалентно всем фильмам выше)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню