API서버 - 클라이언트에서 입력받은 값으로 DB 수정하기 (PUT)

이번 포스팅은 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
  • 서버 URL : 로컬호스트/recipes/숫자
    • DB 값 입력받은 값으로 수정
# app.py
from flask import Flask
from flask_restful import Api
from resources.recipe_info import RecipeResource # 입력 받은 값 수정

# API 서버를 구축하기 위한 기본 구조
app = Flask(__name__)

# restfulAPI 생성
api = Api(app)

# 경로와 리소스(api코드) 연결
api.add_resource(RecipeResource, '/recipes/<int:recipe_id>') # /recipes/숫자

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

 

기능 설계 - DB의 값을 클라이언트가 입력한 값으로 수정하기

  • 추가 리소스 파일 : recipe.py
  • 기능 : DB의 값 수정하기 (Class=RecipeResource)
  • 입력 받은 값 recipe_id 변수에 저장
  • SQL Query : update 이용 
  • request.get_json으로 입력 받은 데이터를 data 변수에 저장
  • 값 입력, 수정, 삭제의 작업은 commit을 해야 수행
from flask import request
from flask_restful import Resource
import mysql.connector
from mysql_connection import get_connection # DB 연동 사용자 파일

class RecipeListResource(Resource) :
    # 데이터를 업데이트하는 API들은 put 함수를 사용한다.
    def put(self, recipe_id) :
        data = request.get_json()
        try :
            connection = get_connection()
            query = '''
                    update recipe set
                        name=%s, description=%s, cook_time=%s, direction=%s
                    where id = %s;
                    '''
            record = (data['name'], data['description'], data['cook_time'], data['direction'], recipe_id)
            cursor = connection.cursor()
            cursor.execute(query, record)
            connection.commit()
            cursor.close()
            connection.close()

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

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

POSTMAN

API 기능 테스트

  • PUT - 로컬호스트/recipes/수정을 원하는 데이터의 인덱스
  • 컬럼에 맞는 코드 입력 후 Send


MySQL

  • 수정 전 : select * from recipe

 

  • 수정 후 : update recipe set name=%s, description=%s, cook_time=%s, direction=%s where id = %s