
$ python manage.py shell
django-extensions 및 ipython 패키지를 설치하고 설정해야 함.django-extensions 설치
$ pip install django-extensions
settings.py 수정
# settings.py
INSTALLED_APPS = [
...
'django_extensions',
...
]
ipython 설치
$ pip install ipython
현재 설치된 패키지들을 requirements.txt 파일로 저장하기
$ pip freeze > requirements.txt
$ python manage.py shell_plus
shell_plus는 django-extensions를 통해 제공되는 명령어로, 기본 shell 명령어보다 더 많은 기능과 자동 임포트를 지원함.Model.objects.all(): 특정 모델의 모든 데이터를 조회할 때 사용함. DB에 저장된 모든 객체를 QuerySet 형태로 반환하며, 반환된 QuerySet은 반복 가능하며 각 객체를 개별적으로 접근할 수 있음.$ Article.objects.all()
Model.objects.get(조회할 대상): 특정 모델의 조건에 맞는 특정 객체를 하나만 조회할 때 사용함. 아래 예제는 id가 1인 Article 객체를 반환함.$ Article.objects.get(id=1)
Model.objects.filter(조건): 조건에 맞는 객체들을 모두 조회할 때 사용함. 조건에 맞는 객체가 없을 경우 빈 QuerySet을 반환함.$ Article.objects.filter(title__contains='a')
| 표현식 | 설명 | 예시 |
|---|---|---|
field__exact='value' | 필드가 정확히 'value'와 일치하는 객체 조회 | title__exact='Title' |
field__iexact='value' | 필드가 'value'와 대소문자 구분 없이 일치하는 객체 조회 | title__iexact='title' |
field__contains='value' | 필드에 'value'가 포함된 객체 조회 | title__contains='a' |
field__icontains='value' | 필드에 'value'가 대소문자 구분 없이 포함된 객체 조회 | title__icontains='a' |
field__gt=value | 필드가 'value'보다 큰 객체 조회 | id__gt=10 |
field__lt=value | 필드가 'value'보다 작은 객체 조회 | id__lt=10 |
field__gte=value | 필드가 'value'보다 크거나 같은 객체 조회 | id__gte=10 |
field__lte=value | 필드가 'value'보다 작거나 같은 객체 조회 | id__lte=10 |
field__startswith='value' | 필드가 'value'로 시작하는 객체 조회 | title__startswith='T' |
field__endswith='value' | 필드가 'value'로 끝나는 객체 조회 | title__endswith='e' |
field__year=value | DateTimeField의 연도가 'value'인 객체 조회 | created_at__year=2024 |
field__month=value | DateTimeField의 월이 'value'인 객체 조회 | created_at__month=1 |
field__day=value | DateTimeField의 일이 'value'인 객체 조회 | created_at__day=15 |
field__in=[value1, value2] | 필드가 지정된 값 목록에 있는 객체 조회 | id__in=[1, 2, 3] |
field__isnull=True | 필드가 NULL인 객체 조회 | updated_at__isnull=True |
field__regex=r'regex' | 필드가 정규 표현식 'regex'와 일치하는 객체 조회 | title__regex=r'^[A-Za-z]' |
article = Article(title='Title', content='Content') article.save()
- 객체를 생성한 후
save()메서드를 호출하여 DB에 저장하는 방식.- 객체 생성 후 데이터를 추가로 수정할 수 있어 유연한 데이터 조작이 가능함.
article = Article() article.title = 'Title' article.content = 'Content' # save()하기 전까지는 DB에 저장되지 않음 article.save()
- 빈 객체를 생성한 후, 각 속성을 개별적으로 지정하고
save()메서드를 호출하여 DB에 저장하는 방식.- 객체 생성 시 데이터를 미리 지정하지 않고, 필요한 속성을 순차적으로 설정 가능.
- 데이터가 단계적으로 제공될 때 적합함.
Article.objects.create(title='Title', content='Content')
create()메서드를 사용하여 객체를 생성하면서 동시에 DB 에 저장하는 방식.- 코드가 간결하며, 생성과 저장을 한 번에 처리 가능.
- 단순한 객체 생성 및 저장 작업에 적합함.
__str__ 메서드class Article(models.Model): title = models.CharField(max_length=50) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.title
__str__: 객체를 문자열로 표현할 때 호출되며, Django Admin이나 Django 쉘에서 객체를 조회할 때 유용함.- 객체의 메모리 주소 대신, 정의된 문자열 (예제에선
title) 이 출력되므로, DB 의 여러 객체들 사이에서 원하는 객체를 쉽게 식별할 수 있음.
.save()를 호출해 DB에 반영함.$ article = Article.objects.get(id=1) $ article.title = 'Updated Title' $ article.save()
.delete() 명령어를 사용해 DB에서 삭제함.$ article = Article.objects.get(id=2) $ article.delete()