Q. 관계 객체 매핑(ORM)이란?

go easy on NG·2023년 1월 14일
0

Q&A

목록 보기
8/18

ORM은

  • 장고에서만 사용하는 '기능'이다.
  • 파이썬 언어로 데이터 작업을 할 수 있게 하는 기능이다.
  • 객체(by 클래스)와 관계형 데이터베이스의 데이터(by 테이블)를 자동으로 매핑(연결)해주는것
  • 객체 모델과 관계형 모델 간의 불일치가 존재한다
  • sql문을 자동으로 생성해 불일치를 해결한다.
  • 데이터 모델을 생성하면 장고는 데이터베이스 api를 호출한다. 즉 장고가 데이터베이스와 클라이언트를 파이썬으로 연결해 주는 것이다.
  • 사용하는 이유는 데이터베이스를 다루는것에 매우 직관적이고 간단하기때문이다.
  • 파이썬으로 작성된 언어가 sql로 매핑되어 quaryset란 자료형태로 넘어온다.

장점

  • SQL쿼리가 아니니 직관적인 코드로 데이터를 조작할 수 있어 개발자가 모델로 프로그래밍하는데 집중할수 있도록 도와준다.
  • 부수적인 코드가 줄어든다.
  • 각종 객체에 대한 코드를 별도로 작성하여 가독성을 높인다.
  • 객체 지향적인 접근으로 생산성이 증가한다.

단점

  • 완벽한 ORM으로만 서비스를 구현하기 어렵다.
  • 사용하기는 편하지만 설계의 신중성을 요한다.
  • DBMS의 고유기능을 이용하기가 어렵다.

기본지식

쿼리문

  • 데이터 작업을 위한 데이터베이스 문법이다.
  • 데이터베이스에 정보를 요청하는 것

쿼리문의 단점

  1. 같은 목적으로 작성해도 개발자마다 다양한 쿼리문이 만들어져 통일성이 깨진다.
  2. 개발자가 쿼리문을 잘못 작성하면 성능이 저하될 수 있다.
  3. 데이터베이스를 변경하면 특정 데이터베이스에 의존하는 쿼리문을 수정해야하는 유지 보수의 어려움이 있다.

BUT

  • 장고의 ORM은 데이터베이스의 테이블을 모델화해 사용하여 위의 단점 모두 사라진다.

사용법

  • python manage.py shell
    장고에서는 데이터베이스와 직접 소통하는 방법은 장고의 shell을 사용하는 것이다.
  • from 모델 import 클래스
    무조건 import를 해와야한다.
  • 클래스.objects~
    장고의 모든 모델은 .objects(=manager())를 가지고있다.(모델을 만들면 같이 만들어진다.)
    문법 : 클래스이름.objects.values()
    .all() : 모든 모델을 불러온다.
    .get() : 괄호안의 하나의 조건을 가진 데이터만을 반환한다. 만약 반환값이 1개 이상이라면 오류가 뜬다. 즉 결과도 하나만 나오는것이어야 한다.
    .filter() : 괄호안의 조건에 따라 모델이 이미 가지고있는 속성만을 검색해준다.
    .create() :
    .delete() :
    .save() : 저장

QuerySet

  • list다.(객체는 dictionary)
  • 연산자를 묶어주는 역할을 한다.
  • ex) 필터 조건을 두번 주고싶다던가
  • 데이터베이스에서 전달받은 객체/row(db sql)의 모음
  • 리스트의 구조는 같지만 파이썬 기본 자료구조가 아니기 때문에 - 파이썬에서 읽고 쓰기 위해 자료형 변환을 줄때 사용한다.
  • 미리 데이터베이스에 접근하는게 아닌, 출력등의 필요한 순간에만 매핑되어 db에 접근해 값을 가져온다.

look_up 모델

  • 조회를 구현하는 일반 클래스
  • 밑줄(언더스코어) 두개 문자 __
    __exact : 정확히 일치
    __contains : 포함하는지
    __gt : 큼
    __gte : 크거나 같음
    __lt : 작음
    __lte : 작거나 같음
    __startwith : 시작하는지
    __endwith : 끝나는지
profile
🐥개발자

0개의 댓글