[Django] DB API와 shell_plus

작성:    

업데이트:

카테고리:

태그: ,

DB API

  • DB를 편하게 조작하기 위한 도구
  • django가 기본적으로 ORM을 제공함에 따른 것
  • Model을 만들면 django는 database-abstract API를 자동으로 제작


database-abstract API

  • database-abstract API 혹은 database-access API라고 한다.
  • 객체를 만들고 읽고 수정


Making Queries

  • 문법 : ClassName.Manager.QuerySetAPI
  • 예시 : Article.objects.all()


ClassName

  • models.py에서 스키마를 정의한 클래스
  • 쉽게 생각하면 DB 테이블 자체라고 생각


Manager

  • django 모델에 DB query 작업이 제공되는 인터페이스
  • 기본적으로 모든 django 모델 클래스에 object라는 Manager 추가
  • DB 테이블의 데이터 record 각각이 하나하나의 object


querySet API : method

  • querySet : DB로부터 전달받은 객체 목록(결과)
  • queryset 안의 객체는 0개, 1개, .. 혹은 N개
  • DB로부터 조회, 필터, 정렬 등 수행


Django shell

1. pip 설치

  • 일반 Python shell을 통해서는 django project 환경에 접근 불가능
  • django project 설정이 load된 Python shell을 활용해 DB API 구문 테스트 진행

  • 기본 Django shell보다 더 많은 기능을 제공하는 shell_plus를 사용해서 진행
  • shell_plus는 Django-extensions 라이브러리의 기능 중 하나
$ pip install django-extensions
$ pip install ipython
  • django-extensions : shell_plus를 사용하기 위한 pip
  • ipython : shell_plus이 terminal에서 보이는 인터페이스를 결정하기 위해 설치


2. settings.py App 등록

이후 project의 settings.py 파일에 django_extenstions 앱으로 등록해준다.

# settings.py

INSTALLED_APPS = [
    ...,
    'django_extensions',
    ...,
]

주의📢 pip install 시에는 django-extensions(하이픈), INSTALLED_APPS에는 django_extensions(언더바)임에 주의한다.


3. shell_plus 실행

django_extensions를 앱으로 등록하면 shell_plus를 실행할 수 있게 된다.

$ python manage.py shell_plus


위의 명령어를 치면 git bash가 shell_plus로 바뀐다.

# Shell Plus Model Imports
from articles.models import Article
...
from django.contrib.sessions.models import Session
# Shell Plus Django Imports
from django.core.cache import cache
...
from django.db.models import Exists, OuterRef, Subquery
Python 3.10.1 (tags/v3.10.1:2cd268a, Dec  6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)]   
Type 'copyright', 'credits' or 'license' for more information
IPython 8.1.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: 
  • shell_plus를 실행하면 이전에 model에 정의했던 것을 자동으로 import
  • 일일히 import 해주지 않아도 돼서 유용하다.

댓글남기기