Django

Django ORM을 이용해서 DB CRUD 해보기

UserDonghu 2023. 10. 11. 22:48

공식문서 : https://docs.djangoproject.com/en/4.2/ref/models/querysets/#django.db.models.query.QuerySet

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

Django ORM : 우리가 만든 모델 클래스와 DB에 생성된 테이블을 자동으로 연관지어 주는 기술. python 문법을 통해서 DB를 조작할 수 있다.

 

실습(4)에서 만들어둔 모델과 DB를 이용해서 ORM 사용해보기.

 

python manage.py shell

이렇게 colab이나 jupyter notebook 처럼 한줄씩 코드를 실행할 수 있음

blog / models.py 에서 Post 클래스 import 하기

>>> from blog.models import Post

# blog / models.py
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    contents = models.TextField()
    main_image = models.ImageField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

 

READ

 

all : 모든 요소에 접근할 때 사용

모든 요소들이 __str__메서드의 return값 형식으로 보이게 나온다.
pk기준으로 거꾸로 출력

 

get : 특정 요소를 정확히 알고 있을 때 사용. 요소에 접근할 때에는 점을 사용

 

count : 요소의 개수 카운팅

 

filter : 조건에 맞는 값을 반환

exclude : 조건에 맞지 않는 값을 반환

 

조건 연산자를 붙일 때에는 언더바 두개를 붙임. ex) id__lt=3

contains : 포함

icontains : 대소문자 상관없이 포함

startswith : 앞에 매칭

endswith : 뒤에 매칭

eq : equal ( = )

ne : not equal ( != )

lt : lower than ( < )

le : lower or equal ( <= )

gt : greater than ( > )

ge : greater or equal ( >= )

 

Create

create를 통해서 새로운 객체를 생성하고, save로 저장

 

Delete

객체를 지정하고 delete로 삭제

 

Update

객체를 지정하고 수정 후, save로 업데이트

 

 

이렇게 데이터 Create, Read, Update, Delete를 CRUD 라고 한다.

 


날짜 비교

created_at 이라는 연도 필드가 있을 때,

 

연도와 일치되는 게시물

Post.objects.filter(created_at__year=2023)

 

월이 일치하는 게시물

Post.objects.filter(created_at__month=10)

 

일이 일치하는 게시물

Post.objects.filter(created_at__day=17)

 

년, 월, 일에 매칭이 되는 게시물

gt, lt, gte(greater than or equal), lte 를 사용

Post.objects.filter(created_at__gte=date(2023,10,17))