본문 바로가기

BackEnd

API - Python MySQL Connector를 이용해 insert 하는 방법

반응형
Python MySQL Connector를 이용해 insert 하는 방법

 

 

 

1. MySQL

 

 

 

use mysql;

create user 'recipe_user'@'%' identified by 'recipe1234';

grant all on recipe_db.* to 'recipe_user'@'%' ;

 

 

 

2. VS Code

 

 

 

2-1. app.py 파일 만들어서 기본틀 잡기

from flask import Flask
from flask_restful import Api

from resources.recipe import RecipeListResource
from resources.recipe_info import RecipeResource


app = Flask(__name__)

api = Api(app)



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

 

 

 

 

2-3. mysql_connection.py 만들기

 

import mysql.connector

def get_connection() :
    connection = mysql.connector.connect(
        host = 'graphene911-db.cett5e9xjv0f.ap-northeast-2.rds.amazonaws.com',
        database = 'recipe_db',
        user = 'recipe_user',
        password = 'recipe1234'
    )
    return connection

 

 

 

2-3. test.py 만들어서 MySQL에 정상적으로 작동되는지 test

 

# 데이터베이스에 접속해서, 데이터 처리하는 테스트 코드


import mysql.connector

from mysql_connection import get_connection

name = '순두부'
description = '순두부찌개 만드는법'
cook_time = 45
directions = '물넣고 두부넣고 조개넣고 끓인다'

try :
    # 데이터 insert
    #1. DB에 연결
    connection = get_connection()
    #2. 쿼리문 만들기
    query = '''insert into recipe
            (name, description, cook_time, directions)
            values
            ( %s , %s, %s, %s);'''

    record = (name, description, cook_time, directions)

    #3. 커서를 가져온다.
    cursor = connection.cursor()
    #4. 쿼리문을 커서를 이용해서 실행한다.
    cursor.execute(query, record)
    #5. 커넥션을 커밋해줘야 한다. => 디비에 영구적으로 반영하라는 뜻
    connection.commit()
    #6. 자원 해제
    cursor.close()
    connection.close()

# 정상적이지 않을때
except mysql.connector.Error as e :
    print(e)
    cursor.close()
    connection.close()

 

 

 

 

2-3. recipe.py 파일 만들기

 

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

### API 를 만들기 위한 클래스 작성
### class(클래스) 란??  변수와 함수로 구성된 묶음!
### 클래스는 상속이 가능하다!
### API를 만들기 위한 클래스는, flask_restful 라이브러리의
### Resource 클래스를 상속해서 만들어야 한다.

class RecipeListResource(Resource):
    # restful api 의 method 에 해당하는 함수 작성
    def post(self) :
        # api 실행 코드를 여기에 작성

        # 클라이언트에서, body 부분에 작성한 json 을
        # 받아오는 코드
        data = request.get_json()

        # 받아온 데이터를 디비 저장하면 된다.
        try :
            # 데이터 insert 
            # 1. DB에 연결
            connection = get_connection()

            # 2. 쿼리문 만들기
            query = '''insert into recipe
                    (name, description, cook_time, directions)
                    values
                    ( %s , %s , %s ,%s);'''
            
            record = (data['name'], data['description'], data['cook_time'], data['directions']  )

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

            # 4. 쿼리문을 커서를 이용해서 실행한다.
            cursor.execute(query, record)

            # 5. 커넥션을 커밋해줘야 한다 => 디비에 영구적으로 반영하라는 뜻
            connection.commit()

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

        except mysql.connector.Error as e :
            print(e)
            cursor.close()
            connection.close()
            return {"error" : str(e)}, 503

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

 

 

 

 

2-5. app.py파일로 돌아와서 경로와 resource(API 코드)를 연결하기

 

from flask import Flask
from flask_restful import Api

from resources.recipe import RecipeListResource
from resources.recipe_info import RecipeResource


app = Flask(__name__)

api = Api(app)

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








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

 

 

3. python app.py 실행 후 POSTMAN으로 test

 

 

 

4. POSTMAN 하단에 지정해둔 return값으로 성공여부 확인

 

 

 

5. MySQL에서 데이터 확인

 

 

 

반응형