TIL#96 Flask 기초(2)

Dasom·2020년 10월 20일
0

Flask

목록 보기
2/7
post-thumbnail

2020.10.19 부터 브랜디 라는 기업으로 협업을 나가게 되었다!😆
어제는 첫날이기도 해서 OJT를 듣고 회사에 대한 설명과 한달동안 어떤 방식으로 프로젝트과제가 진행되는지 무엇을 하는지 등등 설명을 들었고, 프로젝트과제에 대한 ppt를 전달받았다. 나는 백엔드이기 때문에 일단 모델링부터 시작해야 하기 때문에 일단 사이트에 대해 분석을 시작했고, 모델링을 하기 시작했다. 일단은 거의 끝난 상태이지만 목요일에 있을 모델링 리뷰를 기다리고 있다. 아직은 많이 부족해서 고칠 부분들이 필요하기에 리뷰날을 기다리며 플라스크의 기초를 조금 공부하기로 했다🙂

from sqlalchemy import create_engine
create_engine 함수는 engine 객체를 리턴한다. engine 의 execute 메소드를 통해 SQL을 데이터베이스에 전송해 실행한다.

from sqlalchemy import text
raw string 형태의 SQL을 execute 함수에 전달하여 쿼리하기 위한 함수이다.

execute 메소드는 크게 2가지 parameter를 받는다. 실행할 sql 구문과 sql 구문에 필요한 인자들의 값이다. sql 구문에 필요한 인자들은 딕셔너리 형태로 보내져야 한다. text 함수에 넘겨진 sql에 : 이 포함되어 있다면 인자에서 : 다음에 오는 단어와 동일한 키를 사용해 읽어들여서 치환한다.

# 예
request 
POST /signup HTTP/1.1
{
 'name':'김철수',
 'email':'hihihi@gmail.com',
 'profile':'korean, man, single',
 'password':'asdfjklasdf'
}
 
# 예
@appp.route("/signup", methods=['POST']
def sign_up():
    new_user = request.json
    new_user_id = app.database.execute(test("""
        INSERT INTO users (
            name,
            email,
            profile,
            password
        ) VALUES (
            :name,
            :email,
            :profile,
            :password
        )
    """), new_user).lastrowid

이런 경우가 있다면 VALUES 다음에 오는 :name 은 위에서 설명한대로 '김철수'로 치환되고 :email은 'hihihi@gmail.com' 로 치환, :profile 은 'korean, man, single':password 는 'asdfjklasdf' 로 치환된다.

rowcount
말 그대로 row 를 카운트하는 메소드이다. 기본적으로 주어진 조건에 일치하는 경우의 수를 반환한다. 공부를 하면서 내가 본 rowcount 메소드는 INSERT INTO 의 sql문에서 사용되었기 때문에 이 메소드를 왜쓰는지 처음에는 이해가 안 갔다. 엄청난 구글링 후에 알게 되었다...ㅋㅋ😇

def insert_follow(self, user_id, follow_id):
        return self.db.execute(text("""
            INSERT INTO users_follow_list (
                user_id,
                follow_user_id
            ) VALUES (
                :id,
                :follow
            )
        """), {
            'id'     : user_id,
            'follow' : follow_id
        }).rowcount

내가 헷갈렸던 부분은 이 부분인데 user가 팔로우하는 user의 아이디를 테이블에 저장하는 부분에 왜 rowcount를 쓰는지 의아했는데 200의 조건이 ''이었다. 실제로 입력되는 값과 중복되는 값이 있으면 에러가 발생하도록, none 값이 와야 200이 되도록 되어있었다. 이렇게 또 하나를 배워서 뿌듯하다☺️

jsonify()
프론트로 response를 보내기 위해 return 값을 보낼 때 장고에서는 JsonResponse 로 보냈었는데 Flask 에서는 jsonify() 를 이용하였다. Json 형식으로 보내주며 flask에서만 실행가능하다고 한다. 리스트와 딕셔너리는 가능하지만, set type 은 json형식으로 보낼 수 없기 때문에 인코더를 따로 작성해야 한다.

profile
개발자꿈나무🌲

0개의 댓글