반응형

플라스크 셸은 플라스크를 실행하는데 필요한 환경이 자동적으로 설정되는 것입니다.

(즉 cmd에서 플라스크를 구동하는데 필요한 환경이 자동적으로 설정되는 것이죠)

 

 

Question과 Answer 모델을 플라스크 셸에 불러오겠습니다. 그 후 Question 모델 객체를 만들겠습니다.

 

지운 부분은 제가 오타내서 오류난 거라 무시하시면 됩니다.

 

q객체를 만들었다고 해서 데이터베이스에 저장되는 것은 아닙니다.

데이터 베이스에 저장하려면 다음처럼 SQLAlchemy의 객체를 사용해야 합니다.(DB가 이해할 수 있는 걸로 바꾸기)

 

add 함수를 사용하고 commit까지 실행해야 합니다. 

db.session데이터베이스와 연결된 세션 즉, 접속된 상태를 의미합니다.

데이터베이스를 처리하려면 이 세션이 필요합니다. (add 든 delete든 작업 후 무조건 commit은 해줘야 합니다.)

작업을 취소하고 싶으면 db.session.rollback을 실행하시면 commit전으로 돌아가게됩니다.

 

결과를 보시면 id가 1이 들어감을 볼 수 있습니다. 하나 더 작성 후 다시 확인해 보겠습니다.

이번엔 2가 들어간게 보입니다. 잘 들어갔군요

 

Question.query.all 함수로 모든 데이터베이스에 저장된 질문 데이터를 조회할 수 있습니다.

 

filter함수를 이용해 첫번째 질문 데이터만 조회하도록 하겠습니다.

(filter 함수는 조건에 맞는 데이터를 모두 반환해줍니다.) 여기에선 Question.id값이 1인 것만 조회했습니다.

 

다만 get 함수로 조회하면 리스트가 아닌 Question 객체 1개만 반환 합니다. 

 

<Question 1> (Question.query.get으로 조회)

[<Question 1>](Question.query.filter로 조회)

 

Question.query.filter의 경우는 리스트에 담겨 있죠?

 

Question.subject.like('%플라스크%') 코드의 의미는 Question 모델 subject 속성에

플라스크라는 문자열이 포함되었는가? 라는 의미이다.

 

플라스크%   : '플라스크'로 시작하는 문자열

%플라스크   : '플라스크'로 끝나는 문자열

%플라스크% : '플라스크'를 포함하는 문자열

 

 

 

이번엔 데이터를 수정해보겠습니다.

 

위에 조회하는 방법을 이용해 객체에 담은 다음 속성을 접근해서 바꾼다음 commit 해주었습니다.

 

이번엔 데이터를 삭제해보겠습니다.

 

위에 데이터를 조회해서 객체에 담은 후 q에 담긴 <Question 1>을 찾아삭제후 적용시키고 검색해보니

값이 안 나온 걸 보니 잘 삭제 된 걸 알 수 있습니다.

 

답변 데이터를 생성 후 저장해보겠습니다.

 

id가 2인 질문 데이터를 가져온 다음 q에 저장했습니다. q = Question.query.get(2)

a에 그에 해당하는 답변을 넣고 그걸 db에 추가 후 적용 시킵니다.

 

question에 q를 대입하면 question_id에 값을 지정하지 않아도 자동으로 입력됩니다.

왜냐하면 question값은 역참조가 걸려있어서 질문에 대한 id값이 들어오게 되면 그걸로 찾아갈 수 있게 되어있습니다.

 

a는 Answer에 대한 건데 a.question이라고 하면 Answer과 연결된 Question을 가져올 수 있습니다.

또한 q는 Question에 대한 건데 q.answer_set이라고 하면 그에 해당하는 Answer이 뭔지 가져올 수 있습니다.

backref=db.backref('answer_set')으로 적용 했기 때문

 

역참조라는 녀석은 아주 신통방통한 녀석으로서 꼭 기억해 두세요

 

 

반응형