ruriruriya

[RESTful API] Python MySQL- Connector를 활용한 insert 방법 본문

☁️RestFul API (Python Flask)

[RESTful API] Python MySQL- Connector를 활용한 insert 방법

루리야ㅑ 2023. 12. 6. 18:32
반응형

Python MySQL Connector를 활용하여
SQL문으로 작성하여 쿼리문을 만들고 실행하고 반영해보자.

 

1. MySQL에서 쿼리문 확인

MySQL에서 insert 문 쿼리를 작성하여 테스트한다.

insert into recipe
(name, description, num_of_servings,
	cook_time, directions)
values
('된장찌개','된장찌개 잘 끓이는 방법',2, 40,
	'두부 넣고 물 붓고 된장 넣고 끓인다.');

잘 들어가는 것을 확인할 수 있다.

 

2.MySQL 접속 함수 만들기

mysql.connector 패키지 import 하여

파이썬으로 MySQL에 접속하는 함수를 만든다.
(host 등...은 Config로 다른 파일을 가리킴.)

import mysql.connector

from config import Config

# 파이썬으로 MySQL에 접속할 수 있는 함수.
def get_connection() : 
    connection = mysql.connector.connect(
        host = Config.HOST,
        database = Config.DATABASE,
        user = Config.DB_USER,
        password = Config.DB_PASSWORD
    )

    return connection

Config 클래스

3. API 경로와 Resource 클래스 연결

API를 구분해서 실행시키는 것은, HTTP METHOD와 URL 의 조합으로 경로(path)와 리소스(API 코드)를 연결한다.

from flask import Flask
from flask_restful import Api
from resources.recipe import RecipeListResource, RecipeResource

app = Flask(__name__)

api = Api(app)


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


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

 

4. API 클래스에서 mysql 접속 및 쿼리문 만들기

flask 라이브러리와 mysql.connector 패키지 import 후

리소스 클래스를 오버라이딩 하여 post 함수를 만들고
클라이언트가 보내준 데이터를 받은 후

아까 만든 MySQL 접속을 위한 get_connection() 함수를 사용해 연결하고
그 다음 MySQL에서 테스트했던 쿼리문을 복사/붙여넣기 한다.
쿼리문의 값은 클라이언트가 어떻게 입력하느냐에 따라 변동하기 때문에 모두 %s로 바꿔준다.

그 후에 쿼리문에 매칭되는 변수 처리를 해주고
실행하고 커밋하는 작업을 해준다.

# flask 라이브러리와 mysql.connector 패키지 import
from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error


class RecipeListResource(Resource):

    def post(self):
        
        # 1. 클라이언트가 보내준 데이터 받기

        data = request.get_json()

        print(data)

        # 2. 받아온 레시피데이터를
        #    DB에 저장해야 한다.

        try :
            # 2-1. db에 연결하는 코드
            connection = get_connection()

            # 2-2. 쿼리문 만들기 - insert 쿼리만들기.
            query = '''insert into recipe
                        (name, description, num_of_servings,
                            cook_time, directions)
                        values
                        (%s,%s,%s,%s,%s);'''
            # 2-3. 위의 쿼리에 매칭되는 변수를 처리해 준다.
            record = ( data['name'] , data['description'] , 
                      data['num_of_servings'], data['cook_time'],
                         data['directions'])

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

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

            # 2-6. 커밋해줘야, DB에 완전히 반영된다.
            connection.commit()

            # 2-7 자원해제
            cursor.close()
            connection.close()
            
        except Error as e :
            print(e)
            cursor.close()
            connection.close()
            return{"result":"fail", "error": str(e)},500


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

 

5. postman으로 테스트

코드 작성 후 vscode 터미널에서 

flask run 명령어를 실행한다.

postman에 접속하여
post, 경로, body에 json 입력하고

send 버튼을 눌러 전송한다.

하단에 성공 메세지가 뜨고

MySQL에서 잘 들어갔는지 확인해본다.

select *
from recipe;

반응형