본문 바로가기
Flask

Flask 영화명 검색 API

by leopard4 2023. 1. 9.

 

 

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