Django
[Django] ORM 실습
winter17
2023. 3. 28. 15:27
2023.03.28 - [Django] - [Django] ORM
# newspapers/models.py
from django.db import models
class Newspaper(models.Model):
title = models.CharField(max_length=80)
content = models.TextField
journalist = models.CharField(max_length=80)
created_at = models.DateTimeField(auto_now_add=True)
# migrate 수행
python manage.py makemigrations
python manage.py migrate
⎣ 기존의 db.sqlite3 파일 삭제하고 아래 파일 다운받아서 있던 자리에 이동하면 됨
# 1. pk 필드가 1인 단일 데이터의 journalist 필드 조회
newspaper = Newspaper.objects.get(pk=1)
newspaper.journalist # Laney Mccullough
# 2. journalist 필드가 Laney Mccullough인 데이터 개수 조회
newspapers_count = Newspaper.objects.filter(journalist='Laney Mccullough').count()
newspapers_count # 858
# 3. pk 필드 기준 내림차순으로 정렬한 모든 데이터 조회
newspapers = Newspaper.objects.all().order_by('-pk')
newspapers
# 4. created_at 필드 기준 내림차순으로 정렬한 모든 데이터 조회
newspapers = Newspaper.objects.all().order_by('-created_at')
newspapers
# 5. journalist 필드가 Britney를 포함하는 데이터 개수 조회
newspapers_count = Newspaper.objects.filter(journalist__contains='Britney').count()
newspapers_count # 799
# 6. journalist 필드가 ['Britney Mahoney', 'Arianna Walls', 'Carl Short']에 속하는 데이터 개수 조회
newspapers_count = Newspaper.objects.filter(journalist__in=['Britney Mahoney', 'Arianna Walls', 'Carl Short']).count()
newspapers_count # 2469
# 7. created_at 필드가 2000-01-01 이후 데이터 개수 조회
newspapers_count = Newspaper.objects.filter(created_at__gte='2000-01-01').count()
newspapers_count # 4355
# 8. 마지막 단일 데이터의 title, content, journalist 필드를 조회하고 출력
newspaper = Newspaper.objects.last()
print(f"title : {newspaper.title}")
print(f"content : {newspaper.content}")
print(f"journalist : {newspaper.journalist}")
► get()
- Model 클래스의 특정 객체를 가져오는 함수
- 인자로 검색하려는 필드의 조건을 전달하여 검색
- 검색 조건에 해당하는 객체가 하나인 경우 해당 객체 반환, 없거나 여러 개인 경우 DoesNotExist 또는 MultipleObjectsReturned 에러 반환
► filter()
- Model 클래스에서 특정 조건에 맞는 모든 객체를 가져오는 함수
- 인자로 검색하려는 필드의 조건을 전달하여 검색
- 검색 조건에 해당하는 모든 객체를 QuerySet 형태로 반환
► order_by()
- QuerySet의 객체를 정렬하는 함수
- 인자로 정렬하려는 필드를 전달하여 정렬
- '-' 기호를 붙여 역순으로 정렬 가능(내림차순)
► __contains
- 문자열 필드에서 특정 문자열이 포함된 객체를 검색하는 함수
- filter()나 exclude() 함수와 함께 사용
► __in
- QuerySet의 필드 값이 특정 값 리스트에 속하는 객체를 검색하는 함수
- filter()나 exclude() 함수와 함께 사용
► __gte
- 조건 검색에서 특정 값 이상인 객체를 검색하는 함수
- greater than or equal to(크거나 같다)의 약어로, 조건 검색 시 필드명 뒤에 '__gte' 형태로 사용
- 예를 들어, created_at__gte=datetime.date(2022, 1, 1)와 같이 사용
► last()
- QuerySet에서 마지막 객체를 가져오는 함수
- order_by() 함수를 사용하여 정렬 후 마지막 객체 반환