Skip to content

Django ORM #
Find similar titles

Structured data

Category
Programming

Django ORM #

Django란 Python 기반의 웹 프레임워크로 자세한 내용은 여기를 참고하면 된다.
ORM이란 Object-Relational Mapping의 약자로 객체(Object)와 관계형 데이터베이스(Relational Database)의 데이터를 매핑(Mapping)해주는 것을 의미한다. 객체 간의 관계를 바탕으로 SQL을 자동 생성하여 sql쿼리문 없이도 데이터베이스의 데이터를 다룰 수 있게 해준다.
데이터베이스의 테이블을 객체지향 프로그래밍에서 흔히 사용하는 객체(Class)처럼 사용할 수 있도록 해주는 기술이다.
기존 쿼리문을 작성하여 데이터베이스를 조작하는 것을 넘어서서 더 효율적이고 가독성 및 유지 보수에 적합한 코드를 만들기 위해 나온 기술이다.

예시 #

  • book 이라는 객체에서 저자의 이름이 kim 인 책 목록을 가져오고 싶을 때,

    1. SQL 쿼리문을 사용할 경우

      book_list = new list();
      sql = "SELECT book FROM library WHERE author = 'kim'";
      data = query(sql);
      while (row = data.next()){
          book = new Book();
          book.setAuthor(row.get('author'));
          book_list.add(book);
      }
      

      sql 쿼리문을 작성하고, 데이터를 가져오는 일련의 모든 과정들을 코드에 적어야 한다.

    2. ORM을 사용할 경우

      book_list = BookTable.query(author="kim")
      

    간단하게 한 줄로 원하는 객체를 가져올 수 있다.

ORM 활용 #

  1. 데이터 가져오기

    • objects.all()

      >>> Book.objects.all()
      <QuerySet [<Book: one>, <Book: two>]>
      

    Book객체에 저장된 데이터를 모두 가져올 수 있다.

    • objects.get()

      >>> Book.objects.get(author='kim')
      
  2. 데이터 추가하기

    • objects.create()

      >>> Book.objects.create(title='Developer', author='hyelyn')
      

    데이터 모델 Book객체에 정의된 title과 author 필드에 데이터를 넣어 새로운 데이터를 추가할 수 있다.

    • ()

      >>> book = Book()
      >>> book.title = 'Hyelyn Potter'
      >>> book.author = 'hyelyn'
      >>> book.save()
      
  3. 데이터 검색

    • objects.filter()

      >>> Book.objects.filter(author='heylyn')
      <Queryset [<Book: one>, <Book: two>]>
      

    filter의 반환 값을 쿼리셋(Queryset)이라는 Django ORM에서 발생한 자료형이다.
    쿼리셋은 데이터베이스에서 전달받은 객체들의 목록을 담고있다.
    리스트 구조와 같아서 리스트 사용하는 것과 같이 사용할 수 있디.

  4. 데이터 삭제

    • objects.delete()

      >>> d = Book.objects.get(title='Developer')
      >>> d.delete()
      # 삭제 완료.
      

ORM의 장점 #

  • SQL query가 아닌 직관적인 코드로 (메소드) 데이터를 조작할 수 있어 개발자가 객체모델로 프로그래밍하는 데 집중할 수 있다.
  • 각 객체에 대한 코드를 별도로 작성하기 때문에 코드 가독성이 좋다.
  • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 좋다.

ORM의 단점 #

  • 프로젝트 복잡성이 커질 경우 난이도가 높아진다.
  • 잘못 구현하게 되면 속도가 저하되고 일관성이 없어질 수 있다.
  • sql 쿼리문으로 다루지 않다 보니 정확한 원리를 이해하는데 어려움이 발생할 수 있다.

참고문헌 #

  1. ORM(Object-Relational Mapping)이란?

  2. [Django] ORM and Querysets

0.0.1_20140628_0