API 개발/Restful API

Restful API : Python MySQL Connector 인서트 하는 방법

신강희 2024. 5. 23. 17:04
반응형

< Python MySQL Connector 인서트 하는 방법 >

 

# 이제 DB 생성가상환경 생성 그리고 실행에 필요한 프로그램들인 MySQL Workbench, Postman, Visual Studio Code 실행 및 세팅이 완료되었으니, API를 직접 코딩해 보자!

 

# 포스트맨을 실행시켜 POST로 설정하고, URL 입력!

- Body에 raw 선택 JSON 형식으로 DB에 추가하고 싶은 정보를 입력해준다.

 

# VSCode에서 API 코드를 작성!

- 작업의 용이성(실무적으로)을 위해 각 기능이 동작하는 API 코드를 작성할 파일들은 resource라는 폴더를 따로 생성하여 그안에서 작성

 

# recipe.py 파일 안에 레시피를 생성(insert) 하는 코드문 작성

- query 문을 만들때는 꼭! MySQl Workbench로 실제 해당 문구가 정상 실행되는지를 먼저 테스트해 보고 그다음에 복사 붙여넣기하여 사용

 
from flask import request
from flask_restful import Resource

from mysql_connection import get_connection
from mysql.connector import Error

# 클래스를 우선 생성!
class RecipeListResource(Resource) :
    # 레시피를 생성하는 API
    def post(self) :

        # 1. 클라이언트가 보내준 데이터가 있으면
        #    그 데이터를 받아준다.

        data = request.get_json()
 
        # 2. 이 정보를 DB에 저장한다. (MySQL 커넥터를 사용하는 순서)
        try :
            ### 1. DB에 연결
            connection = get_connection()

            ### 2. 쿼리문 만들기
            # 꼭 작성전에 MySQL Workbench에서 직접 실행을 해본뒤 그대로 복사해서 사용해주자!
            # values() 안에는 클라이언트가 입력할 값을 그대로 매칭해서 받을때는 %s 로 작성해준다. 이부분만 수정!
            query = '''insert into recipe
                    (user_id, name, description, num_of_servings, cook_time, directions)
                    values
                    ( %s, %s, %s, %s, %s, %s );'''

            ### 3. 쿼리에 매칭되는 변수 처리 => 튜플로!!
            record = (user_id, 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' : 'success'}, 200
 

 

# app.py 파일에 경로와 리소스(API 코드)를 연결하는 코드도 작성!

 
# API를 처리하는 코드는
# Resource 클래스를 상속받아서 작성한다.
# 이 클래스에는 get, post, put, delete 함수를 상속받는다.
# 따라서 이 함수들을, 우리의 서비스에 맞게 수정해서 사용하면된다.

from flask import Flask
from flask_restful import Api
 
# 생성한 API class 사용을위해서 생성시마다 import 필요!
from resources.recipe import RecipeListResource
 
from config import Config
 
app = Flask(__name__)

api = Api(app)

# 경로(path)와 리소스(API 코드)를 연결한다.
# <int> flask 문법임 외워야됨
# ( 생성하였던 클래스명 , 경로)
api.add_resource( RecipeListResource , '/recipes')

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

 

# 완료 되었으면 서버 실행 후 postman을 실행하여 테스트!

ㄴ 이렇게 success 뜨면 잘 동작된것!

 

# 실제로 데이터가 삽입되었는지 MySQL Workbench 에서 확인!

select * from recipe;

ㄴ 여러번 실행하여서 데이터가조금 많은데 실제로 한번만 실행하였으면 데이터가 한개만 있어야함!

 

다음 게시글로 계속~!

 

728x90
반응형