django shell CRUD #1

eunji hwang·2020년 6월 6일
0

BACKEND-PYTHON-DJANGO

목록 보기
24/28

CRUD

생성 : create

객체 생성 후 save()메서드로 데이터 베이스에 반영한다.
SQL의 INSERT와 같이 동작한다.

from appname.models import Model
from django.utils import timezone # 생성시간 쓰기위해 불러들임

data = Model(컬럼명1=1, 컬럼명2=2, 타임컬럼=timezone.now())
data.save() # Model 테이블에 지정한 컬럼명=값 이 추가 된다.

조회 : read

DB의 내용을 조회하기 위해 QuerySet객체를 사용한다. DB의 객체를 꺼내 담은 컬랙션이 Queryset!
Queryset은 SQL의 SELECT와 같이 동작한다.

  • objects.all() : DB 전체를 Queryset에 담는다.
  • objects.filter() : 조건에(특정 컬럼의 값을 지정하여) 해당되는 레코드를 Queryset에 담는다.
  • objects.exclude() : 조건에 맞는 값을 제외하여 레코드를 Queryset에 담는다.
  • objects.get() : 1개만 리턴 될 것이 확실할 경우에만 사용한다.
Model.objects.all()
# <QuerySet [<Model: What's new?>, <Model: 2nd time>]>

Model.objects.filter(pk=1) 
Model.objects.filter(pk=1, col__startwith='what') 
# pk가 1이며, col이 what으로 시작하는 레코드
# <QuerySet [<Model: What's new?>]>

Model.objects.exclude(pk=1)
# <QuerySet [<Model: 2nd time>]>

Model.objects.filter(col__icontains='?').exclud(pk=3)
# col에 '?'가 포함되고, pk가 3이 아닌

LIMIT, OFFSET

OFFSET, LIMITall(), filter(), exclude()와 함께 [n:n]으로 지정한다.
LIMIT, OFFSET을 사용할 경우 Queryset이 아닌 리스트 형으로 데이터를 반환한다.

Model.objects.all()[:3] # 데이터 중 처음부터 3개 까지만 가져온다.
Model.objects.all()[3:6] # 3~5번까지 가져온다
Model.objects.all()[3:] # 3번부터 끝까지 데이터를 가져온다.

수정 : update

UPDATE, DELETE의 경우 쿼리문이 적게 사용 or 일괄처리 될때 속도가 빠르다.
여러게의 쿼리문을 실행해야한다면 속도가 느려짐 > 성능저하를 일으키기 때문에 효율적으로 코드를 작성해야한다.

이미 존재하는 객체를 수정할때, save()메서드를 사용한다. SQL에느 UPDATE와 같다.

# ** 모델인스턴스별 SQL 수행 = 많은 레코드 수정시 성능저하!

# 수정하고 싶은 데이터를 가져와 변수에 담는다.
data = Model.objects.filter(col__startwith='hello')
# <QuerySet [<Model: hello django>]>

# 변수의 컬럼에 값을 수정한뒤
data.col = 'update'
# 저장하면 DB에 반영된다.
data.save()

Model.objects.all()
# <QuerySet [<Model: update>]>

# -------------------------------------------
 
Question.objects.filter(pub_date__year=2020).update(col='update')
# 3 : 변경된 레코드 숫자가 리턴된다

# -------------------------------------------

삭제 : delete

delete() 메서드를 사용해 레코드를 삭제한다. SQL문 역시 DELETE를 사용한다.

# 테이블의 내용 전체 삭제
Model.objects.all().delete()

# 특정 조건에 해당하는 레코드 내용 삭제
Model.objects.filter(pub_date__year=2020).dalete()

__str__

클래스형 모델을 만들고 __str__ 메서드를 생성해 객체를 문자열로 표현 할 수 있게 한다.

def __str__(self):
    return self.col
    # 쿼리셋이나 뭐시기를 할때 모델을
    # 모델명 col내용으로 표기된다 
    # 예 :  <QuerySet [<Model: update>]>
    # 에서 Model: update 에 해당
profile
TIL 기록 블로그 :: 문제가 있는 글엔 댓글 부탁드려요!

0개의 댓글