FULLTEXT 로 하는 이유는 검색의 속도 향상을 위한것.
class MovieSearchResource(Resource) :
def get(self) : # 영화 정보를 가져오는 API
keyword = request.args.get('keyword')
order = request.args.get('order')
offset = request.args.get('offset')
limit = request.args.get('limit')
try :
connection = get_connection()
# 2가지 정렬조건을 만들어서, 사용자가 선택한 정렬조건에 따라서 쿼리를 실행하도록 한다.
query = '''
select m.id,
m.title,
ifnull(count(r.movie_id), 0) as cnt,
ifnull(avg(r.rating), 0) as avg
from movie m
left join rating r
on r.movie_id = m.id
group by m.id having title like "%''' + keyword + '''%"
order by '''+ order +''' desc
limit ''' + offset + ''', ''' + limit + ''';
'''
# mysql 워크벤치 테이블 인덱스에 title 컬럼 fulltext 추가해야함
# 속도를 위해서
cursor = connection.cursor(dictionary=True)
cursor.execute(query)
result_list = cursor.fetchall()
i = 0
for row in result_list :
result_list[i]['avg'] = round(float(row['avg']), 1)
i += 1
cursor.close()
connection.close()
except Error as e :
print(e)
cursor.close()
connection.close()
return {"result": "fail", "error" : str(e)}, 500
return {"result": "success", "items" : result_list, "count" : len(result_list)}, 200
'Flask' 카테고리의 다른 글
Flask 영화의 리스트를 가져오되, 내가 좋아요 한 영화면 좋아요표시 (0) | 2023.01.10 |
---|---|
Flask 영화 추천 API (0) | 2023.01.09 |
Flask postman mysql (0) | 2023.01.06 |
Flask 백엔드 개발 큰그림 요약 (0) | 2023.01.05 |
Flask 회원가입 API : email체크, 비밀번호 길이체크 암호화, jwt(user_id), 로그인, 로그아웃, 로그인 유저의 리퀘스트 처리, Headers(Authorization & Bearer) , 토큰의 특성 (0) | 2023.01.05 |