Django : ORM

김재훈·2024년 3월 25일

Django

목록 보기
5/15

ORM (Object-Relational-Mapping)

  • 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간에 데이터를 변환하는 기술

ORM의 역할

  • Python - SQL 간에 사용하는 언어가 다르기 때문에 소통 불가
  • Django에 내장된 ORM이 중간에서 이를 해석

QuerySet API

  • ORM에서 데이터를 검색, 필터링, 정렬 및 그룹화 하는 데 사용하는 도구

    API를 사용하여 SQL이 아닌 Python 코드로 데이터를 처리

  • python의 모델 클래스와 인스턴스를 활용해 DB에 데이터를 저장, 조회, 수정, 삭제하는 것

  • QuerySet API 구문

Query

  • 데이터베이스에 특정한 데이터를 보여 달라는 요청
  • "쿼리문을 작성한다."

    원하는 데이터를 얻기 위해 데이터베이스에 요청을 보낼 코드를 작성한다.

  • 파이썬으로 작성한 코드가 ORM에 의해 SQL로 변환되어 데이터베이스에 전달되며, 데이터베이스의 응답 데이터를 ORM이 QuerySet이라는 자료 형태를 변환하여 우리에게 전달

QuerySet

  • 데이터베이스에게서 전달 받은 객체 목록(데이터 모음)
    • 순회가 가능한 데이터로써 1개 이상의 데이터를 불러와 사용할 수 있음
  • Django ORM을 통해 만들어진 자료형
  • 단, 데이터베이스가 단일한 객체를 반환 할 때는 QuerySet이 아닌 모델(Class)의 인스턴스로 반환됨

QuerySet 실습하기

  1. $ pip install ipython
  2. $ pip install django-extensions

(or $ pip install ipython django-extensions)

Django shell

  • Django 환경 안에서 실행되는 python shell (입력하는 QuerySet API 구문이 Django 프로젝트에 영향을 미침)

    python manage.py shell_plus

Create

  • 데이터 객체를 생성하는 3가지 방법
  1. 특정 테이블에 새로운 행을 추가하여 데이터 추가

    • 클래스로부터 인스턴스 생성
    • 인스턴스 변수에 값을 할당
    • save
    • article = Article()
      article.title = 'first'
      article.content = 'django!
      article.save()
    • 클래스로부터 인스턴스를 생성하며, 동시에 인스턴스 변수에 값을 할당
    • save
    • article = Article(title='second', content='django!')
      article.save()
  2. QuerySet API 중 create() 메서드 활용

    • Article.objects.create(title='thrid', content='django!')

Read

  • all()
    • 전체 데이터 조회
  • filter()
    • 특정 조건 데이터 조회
  • get()
    • 단일 데이터 조회
    • 객체를 찾을 수 없으면 DoesNotExist 예외를 발생시키고, 둘 이상의 객체를 찾으면 MultipleObjectsReturned 예외를 발생시킴
    • 위와 같은 특징을 가지고 있기 때문에 primary key와 같이 고유성(uniqueness)을 보장하는 조회에서 사용해야 함

Update

  • 데이터 수정
    • 인스턴스 변수를 변경 후 save 메서드 호출

Delete

  • 데이터 삭제
    • 삭제하려는 데이터 조회 후 delete 메서드 호출

Field lookups

ORM, QuerySet API를 사용하는 이유

  • 데이터베이스 쿼리를 추상화하여 Django 개발자가 데이터베이스와 직접 상호작용하지 않아도 되도록 함
  • 데이터베이스와 결합도를 낮추고 개발자가 더욱 직관적이고 생산적으로 개발할 수 있도록 도움

0개의 댓글