ORM 이란?

ORM 은 Object-relational mapping 의 약자로 객체와 관계형 데이터베이스를 이어준다.

 

  • Database => Mapping => Object
  • Object => Mapping => Database

ORM 의 장점

객체 지향적 코드로 비즈니스 로직에만 집중할 수 있다.

명확한 매핑 정보를 이용해 재사용 및 유지보수의 편의성이 증가한다.

DBMS 에 대한 종속성이 줄어든다.

 

python 에서는 ORM 을 도와주는 대표적인 라이브러리로 SQLAlchemy 가 있다.

이 글에서는 SQLAlchemy 에 대한 내용은 깊게 설명하지 않을 예정이다.

docs.sqlalchemy.org/en/13/orm/tutorial.html

 

Object Relational Tutorial — SQLAlchemy 1.3 Documentation

A Query object is created using the query() method on Session. This function takes a variable number of arguments, which can be any combination of classes and class-instrumented descriptors. Below, we indicate a Query which loads User instances. When evalu

docs.sqlalchemy.org

turorial 사이트를 참고해서 필요한 내용을 찾으면 된다.

 

Model 예시

class Company(db.Model):
    __tablename__ = 'T_Company'
    
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    company_name = db.Column(db.String(100))
    tag = db.Column(db.String(100))

 

예시와 같이 Company Class 를 만들고 Database Table 을 생성할 수 있으며

Company 객체를 이용하여 CRUD 작업을 할 수 있다.

 

하지만 신규 프로젝트가 아닌 이상 기존 Database 를 사용하는 케이스가 많을 것이다.

 

이 때 기존의 Database 를 직접 Model 로 만들려면 오랜 시간이 소요될 것이며

이 시간이 귀찮아서 ORM 을 사용하지 않을 것이다.

 

 

이러한 귀찮음을 해결해주기 위해 sqlacodegen 이라는 라이브러리가 있다.

 

라이브러리 설치

pip install sqlacodegen

 

사용예시

sqlacodegen postgresql:///some_local_db
sqlacodegen mysql+oursql://user:password@localhost/dbname
sqlacodegen sqlite:///database.db

 

postgresql 의 모델을 model.py 로 만드는 예시이다.

sqlacodegen "postgresql://user:password@host:port/dbname" > models.py

해당 예시대로 사용하면 아래 에러가 발생하며 pip 을 사용하여 psycopg2 를 설치해주면 해결된다.

ModuleNotFoundError: No module named 'psycopg2'

 

결과예시

 

 

 

이제 기존 Database 의 model 을 이용하여 코드를 작성하면 된다.

 

다음글에서는 flask 와 SQLAlchemy 를 사용하는 기본예제를 다뤄보겠다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기