如何通过查询数据库来使用flask.jsonify返回嵌套的json?

wz1wpwve  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(506)

下面是我的数据库表架构 Movie (id, movie_name, genre, time, channel) 我有一个 MySQL 表并希望返回嵌套的 json 到api,按流派和频道对它们进行分组。
例如:

  1. [
  2. 'comedy': {
  3. [{'id': 1, 'movie_name': 'm1', 'time': 18:00, 'channel': 'c1'},
  4. {'id': 1, 'movie_name': 'm2', 'time': 18:00, 'channel': 'c2'}]
  5. },
  6. 'horror': {
  7. [{'id': 1, 'movie_name': 'm3', 'time': 18:00, 'channel': 'c1'},
  8. {'id': 1, 'movie_name': 'm4', 'time': 18:00, 'channel': 'c2'}]
  9. }
  10. ]

对于每个通道也是如此。
更新:我没有使用sql炼金术,我现在所做的只是 return jsonify(cursor.fetchall())

rta7y2nd

rta7y2nd1#

下面是另一种更具扩展性的方法:

  1. columns_to_be_jsonified = ['id', 'movie_name', 'time']
  2. genredict = {}
  3. for movie in Movie.query.all():
  4. movietup = movie.genre, movie.channel
  5. moviedict = {}
  6. for column in columns_to_be_jsonified:
  7. moviedict[column] = getattr(movie, column)
  8. if movietup in genredict:
  9. genredict[movietup].append(moviedict)
  10. else:
  11. genredict[movietup] = [moviedict]
  12. return jsonify(genredict)

它回来了

  1. {('horror', 'channel1'): [{'id': 1, 'movie_name': 'it', 'time': '18:00'}, {'id': 2, 'movie_name': 'the ring', 'time': '20:00'}],
  2. ('comedy', 'channel2'): [...]}
展开查看全部
bejyjqdl

bejyjqdl2#

假设您使用的是sqlalchemy orm

  1. comedies = []
  2. horrors =[] #for lack of a better way to put it
  3. all_movies = session.query(Movie)
  4. for movie in all_movies:
  5. if movie.genre == 'comedy':
  6. comedy_entry ={'id':movie.id,
  7. 'movie_name':movie.movie_name,
  8. 'time':movie.time,
  9. 'channel': movie.channel }
  10. comedies.append(comedy_entry)
  11. if movie.genre == 'horror':
  12. horror_entry ={'id':movie.id,
  13. 'movie_name':movie.movie_name,
  14. 'time':movie.time,
  15. 'channel': movie.channel }
  16. horrors.append(horror_entry)
  17. return jsonify({'comedy'= comedies, 'horror'= horrors})

我希望这能引导你,或者至少给你一个起点

展开查看全部

相关问题