💵

006. 장고 shell과 ORM

1. 장고 shell

1.1. shell

장고 쉘(shell)은 파이썬 쉘 처럼 한 줄, 한 줄 명령을 통해 장고의 요소를 조작할 수 있는 CLI 환경입니다.
기존 터미널 창에는 서버를 켜두고 새 터미널 창에서 작업해보겠습니다. 메뉴 중 창 > 새 터미널 창을 누르거나, Alt + Shift + T버튼을 눌러 새 터미널 창을 엽니다.
notion imagenotion image
💡
새 터미널 창에서 작업할 시, 반드시 source venv/Scripts/activate 명령어로 가상환경을 켜는 것을 잊지맙시다.
 
다음 명령을 통해 장고 shell을 실행시킬 수 있습니다.
python manage.py shell
notion imagenotion image
 
종료하고 싶다면 exit() 함수를 호출하면 됩니다.
>> exit()
 

1.2. shell_plus

장고 shell의 불편한 점은 필요한 모델이 있으면 항상 import를 해주어야 한다는 점입니다.
하지만 django-extensions라는 패키지를 설치하면 shell_plus라는 것을 사용할 수 있는데, 기본적으로 장고 shell과 동일하지만, 실행 시 해당 프로젝트 내의 필요한 것들을 자동으로 import해준다는 점입니다.
  • django-extensions를 먼저 설치해줍니다.
    • pip install django-extensions
      notion imagenotion image
 
  • 해당 프로젝트의 settings.pyINSTALLED_APPSdjango_extensions를 추가합니다. 설치 할 때와 다르게 - (dash)가 아니라 _(underscore)라는 점에 유의합니다.
    • INSTALLED_APPS = [ ..., 'django_extensions', ..., ]
 
  • 이제 shell_plus를 실행시켜 봅니다.
    • python manage.py shell_plus
       
      사진과 같이 프로젝트를 다루는데 필요한 모듈들을 실행만 시켜도 자동으로 import해줍니다.
      notion imagenotion image
 

2. ORM

ORM이란 우리가 만든 모델 클래스와 DB에 생성된 테이블을 자동으로 연관지어 주는 기술로 우리가 DB를 직접 조작할 필요 없이 모델 클래스의 python 문법을 통해서 DB를 조작할 수 있는 편리한 기술입니다.

2.1. 조회

  1. all
    1. >> Question.objects.all() <QuerySet [<Question: 1. 당신이 가장 재밌었던 수업은?>]>
       
  1. get
    1. >> Question.objects.get(pk=1) <Question: 1. 당신이 가장 재밌었던 수업은?>

2.2. 생성

>> Question.objects.create(number=2, content="여러분의 서비스가 성공하였다면, 서비스를 성공시킨 요소는?") <Question: 2. 여러분의 서비스가 성공하였다면, 서비스를 성공시킨 요소는?>

2.3. 수정

>> question = Question.objects.get(pk=2) >> question.content = "수정된 문항" >> question <Question: 2. 수정된 문항> >> question.save()
💡
수정 후에는 반드시 .save()를 해주어야 DB에 반영이 됩니다.

2.4. 삭제

>> question = Question.objects.get(pk=2) >> question.delete() (1, {'main.Question': 1})
  • (1, {'main.Question': 1})
    • 1개의 요소가 삭제되었고, 그 중 main.Question 모델의 요소가 1개 삭제되었다는 의미입니다.