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 |