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 파일 삭제하고 아래 파일 다운받아서 있던 자리에 이동하면 됨

db.sqlite3
2.37MB

# 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() 함수를 사용하여 정렬 후 마지막 객체 반환