RestFul API

[RestFul API] Python에서 MySQL DB에 데이터 저장(POST) 하는 방법

Mei99 2024. 5. 21. 12:35

 

 

메인 app.py 코드

from flask import Flask
from flask_restful import Api

from resources.recipe import RecipeListResource


app = Flask(__name__)
api = Api(app)

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


if __name__ == '__main__' :
    app.run()

 

 

 

 

DB에 데이터를 POST(저장)하는 코드는 아래와 같다.

라이브러리에만 저장을 했을 경우, 오류가 생기면 데이터가 전달되지 않을 수도 있다.

그래서 DB에 저장할 정보는 try - except 구문에 저장해 준다.

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

class RecipeListResource(Resource) :

    def post(self) :


       
        #1. 클라이언트가 보내준 데이터가 있으면
        #   그 데이터를 받아준다.(데이터는 pstaman에서 확인)

        data = request.get_json()

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

            ### 2. 쿼리문 만들기
            # 컬럼과 매칭되는 데이터들은 변수처리 : %s
            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 :
            if cursor is not None :
                cursor.close()
            if connection is not None :
                connection.close()
            return{'result' : 'fail', 'error' : str(e)}, 500

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