ACHO.pk devlog

[Django] 데이터베이스(ORM) + 레코드(데이터) 다루기 본문

프레임워크/Django

[Django] 데이터베이스(ORM) + 레코드(데이터) 다루기

Acho 2022. 12. 28. 20:37

ORM : 함수나 메서드를 이용해서 SQL문이 실행될 수 있도록 함

Django   Database
Model = Table
instance = record

 

SQL은 기본적으로 Table 단위로 쿼리하기 때문에 Django에서도 Model 클래스 단위로 쿼리한다.

 


※ 수행 전에 admin 계정과 migrate 해야함

(ex: 애플리케이션 이름 = pantsapp, 데이터베이스 이름 = Pants)

 

·models.py 에 테이블 클래스 정의

class Pants(models.Model):
	p_name = models.CharField(max_length=200)
	p_price = models.IntegerField(default = 0)
	p_size = models.CharField(max_length = 10)
    
	def __str__(self):
    	return self.p_name
        # 외부에서 이 클래스에 접근할 때 테이블의 이름을 반환하여 어떤 테이블인지 쉽게 알아봄
Pants table
id(PK) p_name p_price p_size
       

 

·admin.py 에 Pants 등록

from django.contrib import admin
from pantsapp.models import Pants

admin.site.register(Pants)

 

 

레코드 다루기

·레코드 읽기(read) - 필드 데이터 검색

python manage.py shell
from pantsapp.models improt Pants
p = Pants(p_name='flowerpants', p_price = '25000', p_size = 'M')
p.save()

all() 메서드를 통해 모든 데이터 가져옴

# 모든 데이터 가져와 출력
p = Pants.objects.all() 
p[0]
>> <pants: flowerpants>
p[0].p_size
>> 'M'

# 'floswerpants' 의 이름을 가진 바지의 데이터를 가져와 출력
p = Pants.objects.get(p_name='flowerpants') 
p
>> <pants: flowerpants>
p.p_size
>> 'M'

 

·레코드 읽기(read) - 데이터 필터

# p_price가 20000보다 작은 데이터 
p = Pants.objects.filter(p_price__lt==20000)

# p_price가 20000보다 큰 데이터 
p = Pants.objects.filter(p_price__gt==20000)

# p_price가 20000보다 작거나 같은 데이터 
p = Pants.objects.filter(p_price__lte==20000)

# p_price가 20000보다 크거나 같은 데이터 
p = Pants.objects.filter(p_price__gte==20000)

이외에도

__isnull ~ null인 자료 검색
__contains 특정 문자열을 포함하는 자료 검색
__startwith 특정 문자열로 시작하는 자료  검색
__endwith 특정 문자열로 끝나는 자료 검색

 

·레코드 읽기(read) - 데이터 필터

# p_price을 기준으로 오름차순
p = Pants.objects.order_by('s_price')

# p_price을 기준으로 내림차순
p = Pants.objects.order_by('-s_price')

 

·레코드 업데이트(update) - 데이터 수정

p.s_price = '20000'

 

·레코드 삭제(delete) - 데이터 삭제

p.delete()

 

 

 

'프레임워크 > Django' 카테고리의 다른 글

[Django] MVT/MVC 패턴과 django framework flow  (0) 2022.12.27
[Django] HTTP  (0) 2022.12.27
Comments