Django ORM을 이용해서 DB CRUD 해보기
공식문서 : 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
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 : 모든 요소에 접근할 때 사용
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))