본문 바로가기
Restful API

[Restful API] Query String 페이징 처리하기

by coding_su 2023. 1. 6.

📝Query String 페이징 처리하기

포스트맨에서 Query String할 키와 밸류값을 Query Params에 입력한다

( http://localhost:5000/follow/memo?offset=0&limit=2 이대로 입력해도 자동으로 입력된다 )

offset 밸류값을 0, limit 밸류값을 2로 넣고 실행시키면 해당 데이터를 2개 끊어서 가져온다

코드를 작성할때 클라이언트에서 쿼리스트링으로 보내는 데이터는 request.args에 들어있다

변수로 저장해서 쿼리문에 사용하기

※ 주의할점 MySQL Workbench 쿼리문 작성할때 컬럼은 n이다에만 %s 사용하고 그외는 변수를 더해준다

class MemoListResource(Resource) :
    @jwt_required()
    def get(self) :

        user_id = get_jwt_identity()
        # 클라이언트에서 쿼리스트링으로 보내는 데이터는 request.args에 들어있다
        offset = request.args.get('offset')
        limit = request.args.get('limit')

        try :
            connection = get_connection()

            query = '''select id, title, datetime, content, createdAt, updatedAt
                    from memo
                    where userId= %s
                    order by datetime desc
                    limit ''' + offset + ''' , ''' + limit + ''' ; '''
                    # 컬럼은 ~다에만 %s 사용

            record = (user_id, )

            cursor = connection.cursor(dictionary= True)

            cursor.execute(query, record)

            result_list = cursor.fetchall()

            i = 0
            for row in result_list :
                result_list[i]['datetime'] = row['datetime'].isoformat()
                result_list[i]['createdAt'] = row['createdAt'].isoformat()
                result_list[i]['updatedAt'] = row['updatedAt'].isoformat()
                i = i + 1

            cursor.close()
            connection.close()

        except Error as e :
            print(e)
            cursor.close()
            connection.close()

            return {"error" : str(e)}, 500

        return {"result" : "success", "items" : result_list, "count" : len(result_list)}, 200

댓글