본문 바로가기
API/MySQL API

게시글 생성 API, insert into

by 하니__ 2024. 5. 21.

 

 

 

1. 웹에서 정보를 입력받아 DB에 저장하기

 

우선은 포스트맨에서의 화면을 보자

 

데이터를 생성할때의

HTTP메소드는

CRUD중  Create인

POST로 설정하게 된다

 

생성할 데이터들은 

Body에서

raw를 선택하여

 

json형식으로 쓰이게 되며

 

들어가야할 데이터들을 전부 적어주고 send를 클릭하면 되겠지만

아직은 작동하지않는다

 

 

 

그럼 이제 파이썬의 화면을 보자

 

from flask_restful import Resource

class RecipeListResource(Resource) :
    
    def post(self):
        
        # 1. 클라이언트가 보내준 데이터가 있으면 그 데이터를 받아준다
        data = request.get_json()
        
        # 2. 이 정보를 DB에 저장한다
        try : 
            pass
        except :
           pass
        
        return

 

우선 웹에서의 데이터는 json형태로 받아들일건데,

 

request의 get_json() 함수로 데이터를 받아줄 수 있다

그것을 data라는 이름의 변수로 저장을 하자

 

그리고 그것을 DB로 저장을 시켜야 하는데

 

 

해야 할 것들을 적어보자

 

1. DB에 연결해야한다

2. 쿼리문을 만들어야 한다
3. 쿼리에 매칭되는 변수를 튜플로 처리해야 한다
4. 커서를 가져와서
5. 쿼리문을 커서로 실행한다
6. DB에 완전히 반영하기 위해서는 commit 한다
7. 자원 해제

 

의 순서로 진행해야 한다

 

그래서

 

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

일단 필요에 의해 임포트들을 해준다 이것들은 아래에서 다 쓰이게 된다

 

def post(self):

    # 1. 클라이언트가 보내준 데이터가 있으면 그 데이터를 받아준다
    data = request.get_json()

 

이 부분의 중요한 부분은 post다 

CRUD 중 Create를 담당하는

mysql에서의 insert into가 post라는것을

잊지말자

 

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

 

1. db연결은 get_connection() 함수로

DB에 접속,연결 할 수 있게 해준다

 

### 2. 쿼리문 만들기
query = '''insert into recipe
            (user_id, name, description, num_of_servings, cook_time, directions)
            value
            (%s, %s, %s, %s, %s, %s);'''
### 3. 쿼리에 매칭되는 변수 처리 => 튜플로
record = (data['user_id'],data['name'],data['description'],data['num_of_servings'],data['cook_time'],data['directions'])

2. 쿼리문은 mysql에서 문제가 없는지 미리 실행해본 뒤

copy & paste로 가져온다

그리고 value 값은 %s로 표현 하는데

앞의 데이터와 매치되는 데이터가 들어갈자리를

%s라는 이름의 변수라고 생각하자

 

3. json 형식으로 들어오는 데이터는 딕셔너리의 형태와 같기때문에

각각의 변수로, 튜플형식으로 변환하여 저장하자

 

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

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

### 6. DB에 완전히 반영하기 위해서는 commit 한다
connection.commit()

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

 

 

4. 그 후 데이터베이스와 상호작용하는 도구 커서를 불러온다

5. 불러온 커서를 사용하여 앞에 입력받은 데이터들을 실행

6. 데이터베이스에 저장하기위해 커밋을 해준다

 

7. 데이터베이스 커넥션과 커서는 시스템자원을 소비하기때문에

계속 실행중으로 내버려두면 시스템성능 저하의 원인이 된다

그렇기에 사용이 끝났다면 바로바로 사용이 끝났음을 알리자

 

except Error as e:
    if cursor is not None:
        cursor.close()
    if connection is not None:
        connection.colse()
    return { 'result' : 'fail', 'error': str(e)}, 500

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

 

 

 

그리고 이제 왜 Except 예외의 상황을 적는지에 대해서인데

 

보통 이런 상황을 에러 라고도 하는데

예기치 못한 상황에 빠져버리면

서버가 그 상태 그대로 아무것도 하지 못하는 채로

 

말 그대로 죽어버린다고 봐도 무방하다

 

그렇기에 그것을 방지하기 위해서

그런 상황이라면 프로그램은 계속 실행 될 수 있도록

오류메세지와 함께 서버가 죽지않도록 다른 페이지로 유도 하는것과 같다

 

예를 들어

하늘이 무너진다고 하자

이 상황을 피할 순 없지만

1평 공간의 작은 방으로 들어갈 수 있는 방이 있다고 하면

그 방으로 잠시 들어가는 것이라고 할 수 있겠다

그 공간으로 들어가지 않는다면 죽게 될 테니까

 

아무튼 그런 상황이라도 자원해제는 해주고 오류메세지를 보내자

 

 

 

그리고

2. 테스트해보기

 

 

 

포스트맨으로 접속해 해당하는 문구들을 입력하면

 

reslult success 문구와 함께

 

 

 

 

DB에 저장되는 모습을 확인 할 수 있다

'API > MySQL API' 카테고리의 다른 글

게시글 비공개,공개하는 API  (0) 2024.05.21
게시글 삭제API, delete  (0) 2024.05.21
게시글 수정API, update  (0) 2024.05.21
특정 게시글 읽는 API, select where  (0) 2024.05.21
게시글 읽는 API, select *  (0) 2024.05.21