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
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 를 사용하는 기본예제를 다뤄보겠다.
'Python' 카테고리의 다른 글
python split string to int 초기화 예제 (0) | 2021.06.23 |
---|---|
python reference count (파이썬 레퍼런스 카운트) (0) | 2021.06.07 |
virtualenv 로 패키지 관리하기 (anaconda 를 안쓰는 이유) (0) | 2021.03.26 |
최근댓글