Вот что моя схема таблицы базы данных
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())
Вот еще один, более расширяемый подход:
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'): [...]}
Предполагая, что вы используете 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})
Я надеюсь, что это поможет вам или, по крайней мере, даст вам отправную точку