MySQL Connector 를 이용해 select 하는 방법
1. API 서버 구축
메인 파일 app.py
# app.py
from flask import Flask
from flask_restful import Api
from resources.recipe import RecipeListResource
app = Flask(__name__)
api = Api(app)
# 경로와 리소스(api코드) 연결
api.add_resource(RecipeListResource, '/recipes')
api.add_resource(RecipeResource, '/recipes/<int:recipe_id>')
if __name__ == '__main__' :
app.run()
2. 기능 설계
1. 전체 데이터 가져오기
- select 하여서 전체 데이터를 가져온다.
- select 문에서는 커서를 가져올 때, dictionary = True 로 설정을 해주어야한다.
- DB에서 가져온 timestamp 형태는 파이썬에서 datetime 으로 자동 변환된다.
- 데이터를 json 으로 클라이언트에게 보내줘야하기 때문에, 시간을 문자열로 변환하여서 보내주는 코드도 작성을 하여야한다.
- select 문을 이용하여서 리스트 형태의 데이터를 가져올 때에는 cursor.fetchall() 을 이용하여야 한다.
# get 메소드를 처리하는 함수를 만든다
def get(self) :
# 1. 클라이언트로부터 데이터를 받아온다.
# 없다.
# 2. 디비에 저장된 데이터를 가져온다.
try :
connection = get_connection()
query = '''select *
from recipe;'''
## 중요!! select 문은,
## 커서 가져올 때, dictionary= True 로 해준다.
cursor = connection.cursor(dictionary= True)
# 커서 실행
cursor.execute(query)
# 리스트 형태의 데이터를 가져올 때는 fetchall()을 이용한다
result_list = cursor.fetchall()
print(result_list)
# 중요! 디비에서 가져온 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
class RecipeResource(Resource) :
2. 특정 데이터만 가져오기
def get(self, recipe_id) :
# 1. 클라이언트로부터 정보를 가져온다.
print(recipe_id)
# 2. 디비로부터 해당 레시피 아이디에 맞는
# 레시피 데이터를 가져온다.
try :
connection = get_connection()
query = '''select *
from recipe
where id = %s;'''
# 변수처리 , 튜플형식으로
record = (recipe_id, )
# 쿼리에서 select 하는 문장은 파라미터 dictionary= True 로 설정
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
3. postman 에서 API 기능 테스트
GET 으로 설정하고 send 를 하면 전체 데이터를 가져온다.

특정 데이터만 가져오도록 할 때에는, query string 부분만 수정하면 된다.

'Flask' 카테고리의 다른 글
| API서버 - MySQL Connector 를 이용해 delete 하는 방법 (DELETE) (1) | 2023.01.04 |
|---|---|
| API서버 - MySQL Connector 를 이용해 update 하기 (PUT) (0) | 2023.01.04 |
| API서버 - MySQL Connector 를 이용해서 insert 하기 (0) | 2023.01.04 |
| Python 에서 Mysql 연동하기 (0) | 2023.01.04 |
| [ Flask ] 가상환경 설정, 필요한 프레임워크와 라이브러리 설치 (0) | 2023.01.03 |