1) SELECT구문과 JOIN구문을 사용
- 해당 사용자의 트윗들과 해당 사용자가 팔로우하는 사용자들의 트윗들을 데이터베이스에서 한번의 Query로 읽음
- 읽어들인 로우(row)가 여러개일 것을 감안하여 fetchall()메소드를 사용해서 전부 다 읽음
2) 1)에서 읽어 들인 트윗 리스트를 딕셔너러 리스트(list) 형태로 변환
- 즉, 하나 하나의 로우를 딕셔너리로 변환하여 전체를 for문을 활용하여 리스트에 담음
3) 2)에서 변환한 딕셔너리 리스트를 JSON형태로 HTTP 응답(response)보냄
@app.route('/timeline/<int:user_id>', methods=['GET'])
def timeline(user_id):
row = app.database.execute(text(""" # 1)
SELECT
t.user_id,
t.tweet
FROM tweets t
LEFT JOIN users_follow_list ufl ON ufl.user_id = :user_id
WHERE t.user_id = :user_id
OR t.user_id = ufl.follow_user.id
"""), {
'user_id' : user_id
}).fetchall()
timeline = [{ # 2)
'user_id' : row['user_id'],
'tweet' : row['tweet']
} for row in rows]
return jsonify({ # 3)
'user_id' : user_id,
'timeline' : timeline
})
반응형
'SW ENGINEERING > Flask' 카테고리의 다른 글
API 개발하기(16) - DB Schema (0) | 2021.02.21 |
---|---|
API 개발하기(15) - REFACTORING (0) | 2021.02.21 |
API 개발하기(13) - tweet 엔드포인트 (0) | 2021.02.21 |
API 개발하기(12) - MySQL 설정 & 회원가입엔드포인트 (0) | 2021.02.18 |
API 개발하기(11) - MySQL 다루기 (0) | 2021.02.17 |
최근댓글