개발학습일지

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

Restful API

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

처카푸 2024. 5. 21. 17:25

Python에서 MySQL Connector insert 하는 방법 _개발 흐름 느끼기

 

1. Postman 준비

- Postman을 실행시킨다.
- add request를 눌러 새로운 API를 시작한다.
- HTTP method 는 새로운 데이터를 저장(insert) 할 것이기 때문에 POST로 설정,
- 나의 로컬호스트 번호를 적고 경로를 적어준다.

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

postman 설정하기

 

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

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

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

 

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

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

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

class RecipeListResource(Resource):
    def post(self) :
    	return

 

4. 함수 안에 로직 만들기

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

- DB에 저장하기 : DB연결 -> 퀴리문 만들기 -> 퀴리에 매칭되는 변수 처리 -> 커서를 가져온다 -> 쿼리문 커서로 실행 -> DB반영을 위해 commit -> 자원 해제하기

def post(self) :

        # 로직
        # 1. 클라이언트가 보낸준 데이터가 있으면
        #    그 데이터를 받아준다.
        data = request.get_json()

        # 2. 이 정보를 DB에 저장한다.
        try :
            ### 1. DB에 연결
            connection = get_connection()

            ### 2. 쿼리문 만들기
            query = '''insert into recipe
                        (name, description, num_of_servings, cook_time, directions)
                        values
                        ( %s , %s , %s , %s , %s );'''
            
            #### 3. 쿼리에 매칭되는 변수 처리 => 튜플로!!
            record = (data['name'], data['description'], data['num_of_servings'], data['cook_time'], data['directions'])

            ### 4. 커서를 가져온다
            cursor = connection.cursor()

            ### 5. 쿼리문을 커서로 실행한다
            cursor.execute( query , record )

            ### 6. DB에 완전히 반영하기 위해서는 commit 한다
            connection.commit()

            ### 7. 자원 해제
            cursor.close()
            connection.close()

        except Error as e :
            # try에서 에러가 발생하면 클라이언트한테 리턴해준다.
            if cursor is not None :
                cursor.close()
            if connection is not None :
                connection.close()
            return {'result':'fail', 'error':str(e)}, 500

        return {'result':'success'}, 200

 

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

- 서버 실행  $ flask run

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

200 ok

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

 

 


* 쿼리문 변수 작성

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

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

 

* 에러 코드 작성

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

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

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

 

500 Internal Server Error - HTTP | MDN

The HyperText Transfer Protocol (HTTP) 500 Internal Server Error server error response code indicates that the server encountered an unexpected condition that prevented it from fulfilling the request.

developer.mozilla.org