개발학습일지

[Restfull API] Python에서 MySQL Connector Update 하는 방법 본문

Restful API

[Restfull API] Python에서 MySQL Connector Update 하는 방법

처카푸 2024. 5. 22. 13:12

Python에서 MySQL Connector Update(수정) 하는 방법 _개발 흐름 느끼기

 

1. Postman 준비

- Postman을 실행시킨다.
- add request를 눌러 새로운 API를 시작한다.
- HTTP method는 새로운 데이터를 저장(Update) 할 것이기 때문에 PUT로 설정,
- 나의 로컬호스트 번호를 적고 경로는 기존 레시피 경로에 추가로, 한개의 데이터를 선택하기 위해서 숫자를 임의로 적어준다.

- 저장하고 싶은 데이터 Body에 raw를 JSON 형식으로 입력해 준다.

postman 설정하기

 

2. app.py 에 경로와 리소스를 연결, Entry point에 경로 작성하기

- 경로만 정해뒀기 때문에 경로만 우선 작성

- flask 문법 중 하나로 <int:recipe_id>는 클라이언트가 보내는 숫자 id를 인트로 받겠다는 뜻이다.

# 경로(path)와 리소스(API 코드)를 연결한다.
# Entry point
api.add_resource( 리소스이름  , '/recipes/<int:recipe_id>' )

 

3. 리소스 폴더에 API 만들기

- class 리소스 만들고, app.py에 리소스 이름 적어주기

- 함수에 http 메소드 put 사용한다.

- recipe_id 받아주기

class RecipeListResource(Resource):
    def put(self, recipe_id) :
    	return

 

4. 함수 안에 로직 만들기

- 큰 틀 : 클라이언트가 보낸 데이터 받기 -> DB에 수정하기 -> 클라이언트한테 JSON형식으로 응답하기

- DB에 저장하기 : DB연결 -> 퀴리문 만들기 -> 퀴리에 매칭되는 변수 처리 -> 커서를 가져온다 -> 쿼리문 커서로 실행 -> DB반영을 위해 commit -> 자원 해제하기 -> 에러발생 시 자원 해제하고, 클라이언트에게 알려주는 코드 작성하기

    def put(self, recipe_id) :
        
        # 1. 클라이언트로 부터 데이터를 받아온다.
        print(recipe_id)

        data = request.get_json()

        # 2. DB 에 수정한다.
        try :
            connection = get_connection()

            query = '''update recipe
                        set name = %s, 
                            description = %s,
                            num_of_servings = %s,
                            cook_time = %s,
                            directions = %s
                        where id = %s;'''
            record = (  data['name'],
                        data['description'],
                        data['num_of_servings'],
                        data['cook_time'],
                        data['directions'],
                        recipe_id  ) 

            cursor = connection.cursor()
            cursor.execute(query, record)

            connection.commit()

            cursor.close()
            connection.close()

        except Error as e:
            if cursor is not None :
                cursor.close()
            if connection is not None :
                connection.close()
            return {'result':'fail', 'error':str(e)}, 500


        # 3. 클라이언트에게 JSON 리턴한다.
        
        return {"result" : "success"}

 

5. 코드 작성이 완료되면,

- 서버 실행  $ flask run

- 포스트맨에서 Send를 클릭해 하단의 정보를 확인하고 상태코드 200 OK 인지 확인한다.

200 ok

- 입력한 정보가 DB에 잘 들어갔는지 확인. _ mysql Workbench에서 확인해보기

 

 


* 수정 쿼리문

데이터를 수정할 경우 전체 데이터를 가져와서 수정한다.

 

 

* 쿼리문 변수 작성

컬럼과 값이 동일한 위치 선상에 있으면   %s   쓰고 recode에 튜플 형태로 변수명 작성 _튜플의 기본상태 -> ( , )

문자열 변수를 넣어야 하면   '''+변수명+'''   사용

 

 

* 에러 코드 작성

숫자는 개발자 마음대로 넣는 것이지만 내용을 보고 알맞은 에러 코드를 작성해 주자.

디폴트 코드는 200 (정상)이다.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500