ORM

newhyork·2022년 4월 21일
0

(이 문서는 Python의 ORM, SQLAlchemy를 중심으로 작성되었습니다.)

ORM


Object Relational Mapping

  • 객체를 통해 데이터베이스에 접근할 수 있게 해주는 것을 일컫는다.
    • Python과 관계되는 것으로는 SQLAlchemy와 Django 자체 지원 ORM이 있다.
    • Python에서는 class를 통해 데이터베이스에 접근할 수 있다.
      • 테이블은 class, 튜플은 instance, 컬럼은 class variable에 대응된다.
        튜플은 클래스의 init 메서드를 통해 instance variable에 따라
        간편하게 생성하는 방식을 사용하곤 한다.
      • SQL로 질의를 작성하지 않고, Python 코드로 데이터베이스를 다룰 수 있다.
  • APP과 DB 사이의 connection을 생성부터 종료까지 관여한다.

장점

  • 각종 RDBMS들에 대한 CRUD를 SQL 등이 아닌 Python 코드로 공통되게 작성하여 생산성이 좋다.
    • 개발 단계에서는 SQLite를 쓰다가, 배포 시에 MySQL로 바꾸는 등에 용이하다.
  • 객체를 통해 데이터에 접근 및 수정을 하여 가독성이 좋다.
  • 테이블 구조 변경 시 ORM model만 수정하면 되는 등 유지 보수하기 편리하다.

단점

  • 복잡한 쿼리 작성이 필요할 때 ORM만을 통해 작성 시, 그 난이도가 증가한다.
    • 그래서 복잡한 쿼리는 보통 raw SQL로 작성하곤 한다.
  • ORM만으로는 각 RDBMS 고유의 기능을 모두 사용할 수 없다.

0개의 댓글