프레임워크/django

[Django] ORM과 쿼리셋

superminy 2016. 8. 2. 17:01
728x90
  • ORM(Object Relation Mapper)

    • 데이터베이스의 내용을 객체로 변환 해서 어플리케이션 소스코드에서 직접 객체를 조작할 수 있도록 구성.
    • ORM을 사용해서 개발자는 데이터베이스를 조작하는데 SQL을 사용하지 않고 직접 객체를 사용할 수 있다.
    • database의 table은 ORM에서 model로 표현되고 Record는  Object로 표현된다.

    • 장점

      1. Django 에 구현된 각 RDBMS 별 wrapper 를 통해 RDBMS 의 종류가 어떤 것 인가에 상관없이 만들 수 있다. 
      2. 직관적인 객체지향 프로그래밍이 가능하다.
      3. 기존의 DB 기반 구성을 객체 기반 구성으로 확장하여, 컴포넌트를 조합하는 방식의 개발이 가능하다.
    • 단점
      1. SQL 구문의 생성을 추상화하여 구현 하였으므로, 복잡한 쿼리의 경우 비 효율적으로 SQL 구문이 생성될 수 있다.

  • 쿼리셋

    • 전달받은 모델의 객체 목록. 쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 걸거나 정렬을 할 수 있다.
    • 데이터베이스의 여러 레코드(row)를 나타낸다.

  • 사용 예시

person_set = Person.objects.filter(first_name="Dave")  
    • 위와 같이 filter를 걸면 조건에 맞는 로우를 검색 할 수 있는데  이 쿼리셋에 filter를 추가하거나 함수에 전달해도 이는 DB에 아무런 메시지도 전달하지 않는다.
for person in person_set:  
    print(person.last_name)
for person in person_set:  
    print(person.first_name)
    • 쿼리셋을 순회하는 시점에, 쿼리셋에 해당하는 DB의 레코드들을 실제로 가져오며(fetch), 이는 모두 Django 모델로 변환된다. 이를 가리켜 evaluation이라고 한다. 
    • 평가된 모델들은 쿼리셋의 내장 캐시에 저장되며, 덕분에 위와 같이 쿼리셋을 다시 순회하더라도 똑같은 쿼리를 DB에 다시 전달하지는 않는다.


728x90
반응형

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

django의 정의  (0) 2016.06.27