개미의 개열시미 프로그래밍

[django] ORM과 데이터를 관리하는 모델 생성하기 본문

WEB/django

[django] ORM과 데이터를 관리하는 모델 생성하기

YunHyeok 2021. 6. 28. 17:37
728x90
반응형

위키 독스 '점프 투 장고'를 공부하다가 중요한 내용인 것 같아 복습 겸 블로그에 정리하면서 요약하려고 한다.

 

먼저, 전에 만들었던 배치파일을 실행시켜 바로 가상환경으로 진입했다.

배치파일 이름이 mysite라서 C드라이브로 이동 후 mysite만 입력하면 바로 진입이 된다.

 

 

배치파일을 생성한 이유는 가상환경진입이 귀찮아서 인데 만드는 방법도 간단하고 장고 환경을 구축하는 것도 어렵지 않기에 나중에 기억이 않는다면 아래 링크로 공부하면 될 것 같다.

https://wikidocs.net/72377

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net


ORM(Object-relational mappers)

쉽게 말하면 데이터베이스에서 테이블 생성, 수정, 삭제 또는 테이블 데이터의 내용을 생성, 수정, 삭제 시 사용하는 쿼리문인 SQL 언어를 파이썬으로 작성이 가능한 것이다. 개발자는 파이썬으로 작성을 하면 장고는 SQL로 번역을 해주고 데이터베이스는 번역한 SQL을 이해하는 동작 구조를 가진다. 


데이터베이스의 테이블을 확인하기 위해 아래의 링크에서 SQLite를 설치한다.

sqlitebrowser.org/dl

 

Downloads - DB Browser for SQLite

(Please consider sponsoring us on Patreon 😄) Windows Our latest release (3.12.2) for Windows: Windows PortableApp Note - If for any reason the standard Windows release does not work (e.g. gives an error), try a nightly build (below). Nightly builds ofte

sqlitebrowser.org

 

설치된 SQLite에서 [데이터베이스 열기]를 누르고 나의 db.sqlite3 파일을 누르면 테이블을 확인할 수 있다.

이제 준비는 다됐고 데이터가 들어가는 모델을 만들고 다음 속성을 가진 질문과 답변 모델을 생성하려 한다.

 

질문 
- subject(속성명) : 질문의 제목
- content(속성명) : 질문의 내용
- create_date(속성명) : 일시

답변
- question(속성명) : 질문
- content(속성명) : 답변
- create_date(속성명) : 일시

 

1. [pybo/models.py]에 모델 작성

질문과 답변 모델의 속성에 맞도록 작성하면된다.

-> 장고에 대한 속성은 많기 때문에 공식문서를 참고 

 

 

2. [config/settings.py]를 열어 pybo 앱 등록

 

 

3. [pybo/apps.py] 살펴보기

자동생성이 되는 부분이니 확인하는 정도로 한다.

 

 

4. makemigrations로 테이블 작업 파일을 생성한다.

변한 게 없다고 뜨는 건 이미 전에 테이블을 생성한 상태였고 딱히 추가한 부분이나 삭제한 부분이 없어 이렇게 뜬 것 같다. 

 

 

5. migrate 실행

마찬가지로 전에 실행했었던 상태라서 이렇게 뜬 것 같다.

 

 

6. SQLite로 생성된 테이블 확인

전에 model.py에 생성했던 질문과 답변 모델을 확인할 수 있다.

 

 

모델의 데이터를 생성하고 조회하기

 

1. 장고 셸 실행

데이터를 수정하고 싶을 땐 장고 셸로 진입한다.

 

 

2. 질문, 답변 모델 임포트 하기

 

 

3. 질문 모델 안에 데이터 생성하기

 

4. 질문 모델 데이터 조회하기

두 번째 인덱스에 추가가 된 것을 확인할 수 있다.

 

 

4. 조건으로 질문 모델 데이터 조회

filter는 조건에 해당하는 데이터를 모두 찾아주는 특성이 있다. 

지금은 id가 3인 데이터가 하나라서 위처럼 나온다. 정말 하나만 찾고 싶을 때는 filter 대신 get을 이용하면 된다.

이런 특징으로 인해 filter는 찾는 데이터가 없으면 빈 QuerySet을 get은 오류가 발생한다.

 

 

5. 제목의 일부를 이용하여 조회

subject 속성에 '장고'라는 단어가 들어간 데이터를 찾고 싶을때는 subject__contains='장고'를 입력하면 된다. 여기서 언더바는 두 개라는 점을 유의해야 한다.

 

 

6. 질문 모델 데이터 수정하기

 

 

7. 질문 모델의 데이터 삭제하기

delete함수를 쓰면 삭제가 되면서 삭제된 데이터의 정보를 출력한다.

 

728x90
반응형
Comments