본문 바로가기
  • 콩's 코딩노트
Python

Python MySQL Connector를 이용해 insert 하기 - port 메소드

by Cong_S 2022. 6. 19.

 

pip install flask
pip install flask-restful
pip install mysql-connector-python

 

미리 설치할 라이브러리

 

use mysql;

create user 'recipe_user'@'%' identified by '1q2w3e4r';

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

 

 

먼저 특정 유저만 DB에 접속할 수 있도록 새로운 계정을 만듬.

 

import mysql.connector

def get_connection():
    connection = mysql.connector. connect(
        host = 'host.ctttsro2er9u.ap-northeast-2.rds.amazonaws.com',
        database = 'recipe_db',
        user = 'recipe_user',
        password = '1q2w3e4r'
    )
    return connection

 

다음 파이썬 환경에서 새로운 py 파일을 만들어 위와 같은 함수를 만들어 놓음

위에서 만든 계정을 통해 특정 DB만 접속하도록 만든 것임.

 

app = Flask(__name__)

api = Api(app)

# 경로와 리소스(API 코드)를 연결한다.
api.add_resource(RecipeListResource, '/recipes')
api.add_resource(RecipeResource, '/recipes/<int:recipe_id>')


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

 

다음 메인 파일에서 class로 상속받아 리소스를 추가해준다.

 


파이썬으로 데이터베이스에 데이터 insert 하기

 

상속해준 class가 있는 파일로 와서

class RecipeListResource(Resource):
    # 위 괄호의 리소스는 flask_restful 라이브러리의 Resource 클래스여야 한다.
    # restful API의 method 에 해당하는 함수 작성 
    def post(self):
        # API 실행 코드를 여기에 작성.

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

        # 받아온 데이터를 다시 저장하자.
        try :
            # 데이터 insert
            # 1. DB 연결
            connection = get_connection()

            # 2. 쿼리문 만들기 (%s는 변수 처리해준다는 뜻) 
            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. 커넥션을 커밋해줘야 한다. == DB에 영구적으로 반영하라는 것임.
            connection.commit()

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

        except mysql.connector.Error as e:
            print(e)
            cursor.close()
            connection.close()
            # HTTPStatus.SERVICE_UNAVAILABLE  == 503
            return {'error' : str(e)}, 503


        # 뒤에 숫자는 프로토콜 코드이다.
        return {'result' : 'success'}, 200

다음과 같은 순서로 코드를 작성한다. 

그 후 서버를 실행한 후 포스트맨에서 body에 json 형식으로 데이터를 입력해 원하는 주소로 Send 하면 된다.

 

해당 코드로 작성했을 시 결과에 succes와 코드 200이 나오면 정상적으로 입력된 것이다.

댓글