먼저 데이터 베이스와의 상호작용하기에 앞서 간단하게 shell 명령어를 통해 모델과 데이터베이스를 실제로 탐색하고 활용할 수 있다.
python manage.py shell 를 실행하게 되면 다음과 같이 터미널에 스크립트 형식으로 명령어를 입력할 수 있다. 이 shell을 활용하여 엔트리를 생성하고 삽입하고 확인하는 여러가지 과정을 거치게 될 것이다. 또한 종료하고 싶을때는 quit()을 입력하면 된다.

1. Data interaction: creation & insertion
데이터 베이스에서 만들어진 테이블에 새로운 엔트리를 생성하고 추가하고 싶은 경우 다음과 같은 3가지 방법을 통해서 적용할 수 있다.
1)Model의 형식에 맞게 Oject를 정의하고 .save()를 통해 insert한다.

위 예시의 경우 carl이라는 Oject를 정의하고 .save()를 통해서 엔트리를 insert하는 과정이다.
2)objects.create()
이 명령어의 경우 앞서 엔트리를 create하고 insert하는 과정을 간략하게 한줄로 실행할 수 있는 편리한 명령어이다.

3)objects.bulk_create()
이 명령어의 경우 하나의 엔트리 뿐만 아니라 여러개의 엔트리도 한번에 insert할 수 있는 명령어이다.
2. Data interaction: Reading & Querying
1)all()
앞서 만든 office앱의 models.py에는 Patient라는 class가 정의돼 있다. 이 class를 통해 만든 객체는 위의 .save()를 통해 저장됐는데, 그러한 객체들을 가져오는 명령어가 바로 all()이다. Patient.objects.all()를 하게되면 다음과 같이 만들어놓은 모든 객체를 가져온다.

예시와 같이 (1),(2)등 번호가 매겨진 것을 볼 수 있는데, 이는 각자의 프라이머리 키 즉 id를 가지고 있는 것으로 볼 수 있다.
Patient.objects.all()[0]와 같이 인덱싱을 하면 다음과 같이 원하는 객체를 호출할 수 있다.

3.Data interaction: Filtering
1)get()
get() 메소드를 사용하면 모델 테이블에서 단일 아이템을 가져올 수 있다.
먼저 앞서 만들어 놓은 model을 makemigrations통해 0001_initial.py가 생상된 것을 볼 수 있고,

다음과 같이 해당 파일내에 필드에 대한 정보를 볼 수 있고, id가 primary_key로 설정된 것을 볼 수 있다. 이제 이 pk와 get()을 이용해서
원하는 단일 아이템을 가져올 수 있다.

2)filter()
앞선 get()과는 다르게 filter()는 filter기능을 통해 여러가지 아이템도 가져올 수 있다. 이를 all()와 엮어 사용하는 것도 가능하다.

또한 filter를 중첩으로 사용해서 filter(last_name='smith').filter(age=40).all()와 같은 방식으로도 사용이 가능하다.
3)operator
마지막으로 연산자를 활용해서 복합적 조건(and, or)을 걸어 아이템을 가져올 수 있다.
사용하기에 앞서 shell에서 from django.db.models import Q 와 같이 모듈을 가져와야 한다.

위와 같이 filter()메소드 내부에서 Q메소드를 이용해서 복합적인 조건을 걸어 사용할 수 있게 된다.
'Django Class Review' 카테고리의 다른 글
| Django Class Review4(Admin) (0) | 2025.09.18 |
|---|---|
| Django Class Review3(Model) (0) | 2025.08.20 |
| Django Class Review2(static file) (0) | 2025.08.19 |
| Django Class Review2(custom 404 page) (0) | 2025.08.19 |
| Django Class Review2(template) (4) | 2025.08.14 |