플라스크 셸은 플라스크를 실행하는데 필요한 환경이 자동적으로 설정되는 것입니다.
(즉 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')으로 적용 했기 때문
역참조라는 녀석은 아주 신통방통한 녀석으로서 꼭 기억해 두세요
'플라스크 (추후 수정)' 카테고리의 다른 글
Flask 답변 등록, |length (0) | 2021.08.11 |
---|---|
Flask 질문 목록조회, 상세조회 query.order_by, create_date.desc(), render_template, 탬플릿태그 (if, for, 객체), query.get_or_404, url_for (0) | 2021.08.11 |
Flask BluePrint, 라우트 함수 (0) | 2021.08.09 |
Flask 애플리케이션 팩토리 (0) | 2021.08.09 |
Flask 프로젝트 구성표 (0) | 2021.08.09 |