[백엔드] ORM 은? 개발자'S (Django)

김현수·2023년 1월 3일
0

백엔드

목록 보기
2/6


😵‍💫 ORM 을 알아보자(요약)

@ ORM (Object-Relational-Mapping)

=> "DB의 테이블을 객체처럼 Class 로 사용하는 기술"
=> 더 효율적, 가독성 및 유지 보수에 적합한 코드 만들기

=> 객체와 관계형-데이터베이스(RD) 데이터를 매핑해줌
=> 객체간의 관계로 SQL을 자동 생성
=> SQL 쿼리문 없이도 DB의 데이터를 다룰 수 있게 함

SQL문 자동생성

객체 지향 => CLASS
관계형 DB => TABLE

🥸 쿼리셋 (QuerySets), Django 에서 ORM

#쿼리셋

전달받은 모델의 객체 목록

DB 에서 DATA 를 읽고 필터를 걸거나 정렬 가능



# 역참조

부모_모델.자식_모델_set 

🥸 쿼리셋 (QuerySets) 기능

#조회 - SELECT

from blog.models import 모델명

# 모든 객체 조회(쿼리셋으로 반환)
모델명.objects.all()

# 하나만 조회(주로 pk, 객체 타입 반환)
모델명.objects.get(id=1)

# 특정 조건 row 들만 조회(쿼리셋으로 반환)
모델명.objects.filter(Group_id = 1)

# 특정 조건을 제외한 row 들만 조회(쿼리셋으로 반환)
모델명.objects.exclude(Group_id = 1)

# filter() , exclude() 의 내장 모듈
모델명.objects.filter(code__contains='lucky')

=> __contains / __icontains 
=> __startswith / __endswith
=> __gt / __li / __in

=> 특정 문자 포함(대소문자 구분 / 구분 없이)
=> 특정 문자로 조회(시작 / 끝)
=> 특정 값 조회(큰 / 작은 / 리스트 안에 하나라도 포함)

# filter 를 AND / OR 가능

모델명.objects.filter(id__gt=3) 
 & 모델명.objects.filter(name__startswith="고기")

#생성 - INSERT

from blog.models import 모델명

# 데이터 생성
모델명.objects.create(code='food_cow', name='음식_소')

# 빈 모델에 선언 후 데이터 생성
모델 = 모델명()
모델.code = "food_cow"
모델.name = "음식_소"
모델.save()

#갱신 - UPDATE

from blog.models import 모델명

# 필드 변경 저장
모델 = 모델명.objects.get(code='food_cow')
모델.name = '소_음식'
모델.save()

# 쿼리셋 형태에서 변경
update_v = {'name':'음식_소'}

모델 = 모델명.objects.filter(code='food_cow')
모델.update(**update_v)

#삭제 - DELETE

from blog.models import 모델명

# 필드 삭제
모델명.objects.get(code='food_cow').delete()
모델명.objects.filter(id_in=[1,2,3]).delete()

🥸 ORM 장단점

#장점

완벽한 객체지향
재사용, 유지보수, 리팩토링 편리성
DBMS 에 대한 종속성 줄어들음
SQL 언어를 사용하지 않고도 DB 조작 가능

#단점

복잡한 SQL 문을 생성하는데 어려움
DB 에 직접 쿼리에 보내는 것이 아니라 성능 저하
profile
일단 한다

0개의 댓글