Flask
Flask 영화명 검색 API
leopard4
2023. 1. 9. 14:19
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