반응형
이번 포스팅은 DB와 연결하여 클라이언트가 값을 넣는 방법을 설명합니다.
DB 연동 과정은 이전 포스팅을 참고해주세요.
https://luvris2.tistory.com/182
API서버 - DB 연동하기
API서버 DB연동하기 DB : MySQL Programming language : Python IDE : Visual Studio Code MySQL DB 생성 (recipe) Table 생성 (recipe, user) DB를 관리 할 수 있는 권한 설정하기 (MySQL) SQL 쿼리 use mysql;..
luvris2.tistory.com
Visual Studio Code
API 서버 구축하기
- 메인 파일 이름 : app.py
# app.py
from flask import Flask
from flask_restful import Api
from resources.recipe import RecipeListResource
# API 서버를 구축하기 위한 기본 구조
app = Flask(__name__)
# restfulAPI 생성
api = Api(app)
# 경로와 리소스(api코드) 연결
api.add_resource(RecipeListResource, '/recipes')
if __name__ == '__main__' :
app.run()
DB에 값 넣기
- 소스 코드
- 1. DB 연동 소스 코드가 있는 파일을 호출하여 함수 실행, 파일 이름과 함수는 사용자에 따라 다름
- 파일 호출 : from mysql_connection import get_connection
- DB 연동 : 변수 = get_connection()
- 2. 처리 할 SQL 쿼리문 입력
- 값 입력 : 변수 = ''' insert into TABLE (columns1, 2 ...) values (1, 2, ...) '''
- ''' text ''' : 다줄 입력을 가능하게 해주는 코드
- 값 입력 : 변수 = ''' insert into TABLE (columns1, 2 ...) values (1, 2, ...) '''
- 3. 커서 객체 생성
- 커서(Cursor) : SQL 실행코드의 결과값을 저장하는 객체
- cursor = connection.cursor() : 연동된 데이터베이스의 커서 객체 생성
- connection은 임의로 지정한 DB의 정보가 담긴 변수, 사용자마다 다를 수 있음
- 4. 커서를 이용하여 SQL 쿼리문 실행
- cursor.execute(query) :변수 query 이용하여 SQL 쿼리문을 실행, 결과값을 커서에 저장
- 5. 데이터 저장
- .commit : DB에 저장하는 명령어
- 커밋을 하지 않으면 DB에 값이 정상적으로 입력되지 않음
- 6. 시스템 자원 반환
- .close() : 할당된 시스템 자원을 반환
- 1. DB 연동 소스 코드가 있는 파일을 호출하여 함수 실행, 파일 이름과 함수는 사용자에 따라 다름
# POST Method를 이용하여 DB에 값 넣기
# RecipeListResource.py
# 라이브러리 호출
from flask import request # 클라이언트에서 입력한 정보를 받아옴
from flask_restful import Resource # 입력받은 정보를 자원화
import mysql.connector # DB 연동
from mysql_connection import get_connection # DB 연동 정보를 저장한 사용자 파일
class RecipeListResource(Resource) :
# restfulAPI의 methods에 해당하는 함수 작성
def post(self) :
# api 실행 코드를 여기에 작성
# 클라이언트에서 body 부분에 작성한 json을 받아오는 코드
data = request.get_json()
try :
# DATA INSERT
# 1. Connect DB
connection = get_connection()
# 2. SQL Query
query = '''
insert into recipe
(name, description, cook_time, direction)
values
('된장찌개', '맛있는 된장찌개 만드는 방법',
'30', '된장을 물에 풀어 야채를 넣고 끓여준다.');
'''
# 3. Get Cursor
cursor = connection.cursor()
# 4. Execute Query with cursor
cursor.execute(query)
# 5. DATA commit
connection.commit()
# 6. Close Resource
cursor.close()
connection.close()
# 입력한 값이 올바르지 않을 경우 에러 출력
except mysql.connector.Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 503 #HTTPStatus.SERVICE_UNAVAILABLE
# 정상적으로 됐을 때 200, 기본 값이므로 생략 가능
return {"result" : "success"}, 200
변수로 DB에 값 넣기
- 1. 변수에 값 정의
- 2. SQL 쿼리문에서 변수의 값이 필요한 부분에 %s 로 처리
- %s 는 문자열을 뜻하며, 따옴표(')를 사용하지 않음
- 3. SQL쿼리문에 들어갈 변수들 튜플화
- var = (sql_var1, sql_var2...)
- 변수가 하나 일 경우에는 에러 주의!
- 변수가 하나 일 경우 쉼표(,)를 해주지 않으면 튜플로 인식하지 않음 -> (sql_va1, )
- 4. 커서에 SQL 쿼리문을 실행
- query : SQL 쿼리문의 특정 기능을 수행할 코드를 변수로 저장해둔 것
- var : SQL 쿼리문에 들어갈 변수의 값을 튜플화해서 변수로 저장해둔 것
- execute(query, var) : SQL 쿼리문의 필요한 변수를 var에서 순차적으로 읽어서 실행
# RecipeListResource.py
import mysql.connector
from mysql_connection import get_connection
try :
connection = get_connection()
name = '순두부'
description = '맛있는 순두부찌개 만드는 법'
cook_time = 45
direction = '먼저 고기를 볶은후, 물을 넣고, 순두부 넣고 끓인다.'
query = '''
insert into recipe
(name, description, cook_time, direction)
values
(%s ,%s ,%s ,%s);
'''
record = (name, description, cook_time, direction )
cursor = connection.cursor()
cursor.execute(query, record)
connection.commit()
cursor.close()
connection.close()
except mysql.connector.Error as e :
print(e)
MySQL
DB 값 확인
select * from recipe
반응형