본문 바로가기

RestfulAPI

Restful Python MySQL Connector 셀렉트 하는 방법과 코드

포스트맨을 실행시켜 POST로 설정하고 URL을 입력해준다

※ 포스트맨 겟(GET)과 딜리트(DELETE)는 바디(Body)에 셋팅하지 않는다

 

Visual Studio Code에서 아래처럼 코드를 작성해준다

+ app.py에 경로와 리소스(API코드)를 연결하는 코드도 작성해준다 

 >>> api.add_resource(RecipeListResource, '/recipes')

from flask import request
from flask_restful import Resource
from myspl_connection import get_connection
from mysql.connector import Error

class RecipeListResource(Resource) :

    def get(self) :
        # 1. 클라이언트가 보내준 데이터를 받아온다
        # 없기때문에 작성하지 않는다

        # 2. DB에 저장된 데이터를 가져온다
        try :
            connection = get_connection()

            query = '''select * from recipe;'''

            # 중요. select문은 cursor가져올때 dictionary= True로 해준다
            cursor = connection.cursor(dictionary= True)

            cursor.execute(query)

            result_list = cursor.fetchall()

            print(result_list)
            # 중요. DB에서 가져온 timestamp는 파이썬에서 datetime으로 자동 변환되는데
            # 문제는 json으로 클라이언트한테 데이터를 보내줘야하는데 datetime은 json으로 보낼 수 없다
            # 따라서 시간을 문자열로 변환해서 보내준다
            i = 0
            for row in result_list :
                result_list[i]['created_at'] = row['created_at'].isoformat()
                result_list[i]['updated_at'] = row['updated_at'].isoformat()
                i = i + 1

            cursor.close()
            connection.close()

        except Error as e :
            print(e)
            cursor.close()
            connection.close()

            return {"result" : "fail", "error" : str(e)}, 500

        return {"result" : "success", "items" : result_list, "count" : len(result_list)}, 200

코드를 작성하고 비주얼 스튜디오 코드에서 서버를 실행시키고(flask run)

포스트맨에서 Send를 클릭해 하단의 정보를 확인하고 상태코드가 200 OK 됐는지 확인한다

 

+ 1개만 셀렉트(select)해서 가져오기

class RecipeResource(Resource) :

    def get(self, recipe_id) :
        # 1. 클라이언트로부터 정보를 가져온다
        # print(recipe_id) 디버깅

        # 2. DB로부터 해당 레시피 아이디에 맞는 레시피 데이터를 가져온다
        try :
            connection = get_connection()

            query = '''select * from recipe
                    where id = %s ;'''
			
            # 튜플로 작성해준다(, 안찍으면 에러 발생)
            record = (recipe_id, )

            cursor = connection.cursor(dictionary= True)

            cursor.execute(query, record)

            result_list = cursor.fetchall()

            i = 0
            for row in result_list :
                result_list[i]['created_at'] = row['created_at'].isoformat()
                result_list[i]['updated_at'] = row['updated_at'].isoformat()
                i = i + 1

            cursor.close()
            connection.close()

        except Error as e :
            print(e)
            cursor.close()
            connection.close()
            return {"result" : "fail", "error" : str(e)}, 500

        if len(result_list) == 0 :
            return {"result" : "fail", "message" : "데이터 없습니다"}, 400

        return {"result" : "success", "item" : result_list[0]}, 200