RestFul API

Flask(플라스크)를 사용하여 MySQL DB의 데이터를 수정(PUT)하는 API 만들기

567Rabbit 2024. 5. 21. 16:41

 

초기 DB 데이터

 

 

 

 

 

 

( recipes/2 )  즉, id = 2인 데이터를 아래와 같이 수정하려고 한다. 

 

Body 를 클릭하고 raw(날 것의 데이터)에서 데이터를 Json형식으로 넣어주었다.

 

 

 

 

 

 


DB와 postman을 연동하는 방법은 아래 글을 참고한다

 

 

https://codebunny99.tistory.com/87

 

MySQL DB 설계, 연동하여 RestFul API로 GET하기(DB에 있는 데이터 가져오는 API)

Postman   GET의 Request는 Query String(Query Parameters)을 사용한다- offset : 0- limit : 25     DB 설계하기 코드 입력하고 실행하기 (비밀번호 부분 수정해서 입력한다)-- recipe_db 에만 전용으로 접속할 수

codebunny99.tistory.com

 

 

 

 

VSCode

 

 

app.py 작성하기

 

 

 

<int : recipe_id> 이렇게 작성하는 것을 Flask(플라스크) 라고 한다

 

 

Flask는 Python으로 작성된 경량 웹 프레임워크로, 간단한 웹 애플리케이션이나 API를 신속하게 구축하는 데 사용된다. Flask에서는 URL 경로를 라우트(route)라고 하며, 특정 경로로 접근했을 때 실행될 함수를 정의할 수 있다.

 

 

 



recipe.py 작성하기

 

from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error

class RecipeResource(Resource):

    def put(self, recipe_id):

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

            data = request.get_json()  # 아래 record 에서 쓰인다 

            # 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() #commit하지 않으면 DB에 반영되지 않고 rollback된다

                cursor.close()
                connection.close() 

            except Error as e:
                if cursor is not None:  # null이 아니면
                    cursor.close()
                if connection is not None:
                    connection.close()
                return {'result': 'fail', 'error': str(e)}, 500  # 500 에러

            return {'result': 'success'}

 

 

파일을 저장하여 vscode 터미널 cmd 창에 flask run 하고,

 

 

send를 누르면 "result" : "success" 라고 뜬다.

 

 

 

 

DB에서도 내용이 반영된 것을 볼 수 있다.