본문 바로가기
API/MySQL API

게시글 읽는 API, select *

by 하니__ 2024. 5. 21.

 

 

API 설정

 

일단 포스트맨에서 페이징해서 보기 위해 offset과 limit을 설정해주자

 

그리고 HTTP 메소드는

CRUD중 Read의

GET으로 설정

 

 

 

 

 

 

GET 설정

 

def get(self) :
    # 1. 클라이언트가 보낸 데이터가 있으면 받아준다
    offset = request.args['offset']
    limit = request.args['limit']

우선 함수의 시작부분을 적는다

 

request.args['offset']은

json형태로 값을 가져오기 때문에

딕셔너리형태로 된 request.args에서 'offset' 을 가져오기때문에

( ) 가 아닌 [ ]로 표기한다

limit도 마찬가지

 

 

offset = request.args.get('offset', 0)
limit = request.args.get('limit', 25)

이 부분은 이렇게도 사용가능하며 뒤에 숫자들은 설정을 하지않았을때의 기본값이 된다

 

 

 

DB연결, 쿼리문 작성
try :
    connection = get_connection()

    query = '''select*
                from recipe
                limit '''+offset+''', '''+limit+''';'''
    # record = ()

 

DB를 연결해주고

 

쿼리문을 작성하는데 이때

limit 에서는 offset과 limit을 클라이언트가 입력하는 숫자가 될 수 있도록

''' +  + ''' 을 사용하여

각각 문자열로 처리해준다

 

record는 따로 없기때문에 주석처리

 

커서 불러오기, 실행, 커밋, 자원해제
cursor = connection.cursor()
cursor.execute(query)

result_list = cursor.fetchall()
print(result_list)

cursor.close()
connection.close()

그리고 커서를 가져와 실행

그리고 커밋 후 확인

 

이때 수정은 커밋 대신 fetchall로 대신한다

 

자세한 설명은 아래링크로

[API] - Python으로 Mysql 접속, DB에 저장하는법

 

 

 

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

 

 

해서 확인해봤는데 JSON형식의 딕셔너리{ }가 아닌

소괄호가 튀어나왔다

그래서 이걸

 

딕셔너리 형태로 바꿔줘야 한다

JSON은 { dictionary } 형태

 

cursor = connection.cursor(dictionary=True)

 

커서를 가져오는 부분에서 딕셔너리=트루를 적어준다

 

 

 

이후 딕셔너리형태로 나오게 된다

 

 

그 후 클라이언트에게 리턴하기위해 아래와 같이 입력후확인해보면

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

 

 

 

 

 

내가 설정하지 않은 에러메세지와 함께

 

데이트타임 타입이 JSON과 맞지않다라고 나오게 된다

TypeError: object of type datetime is not JSON serializable

 

 

그렇다 자세히 보면 created_at과 updated_at

즉, 작성시간과 수정시간이 데이트타임형식인데 반해

 

제이슨형식은 문자와 숫자밖에 내보낼수 없다

 

그렇기에 변환시켜 줘야 한다

 

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

 

라고 마지막 리턴 전에 적어주어

 

앞의 결과에서 작성시간과 수정시간의 형식을 for 반복문으로 isoformat() 을 이용하여

문자형식으로 변환시킨다

 

 

 

 

이제 정상적으로 나오게 된다

'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, insert into  (0) 2024.05.21