[파이썬] ORM을 사용한 데이터베이스 릴레이션 관리

개요

ORM(Object-Relational Mapping)은 개발자가 객체 지향 프로그래밍 언어로 데이터베이스를 다루기 위해 사용되는 기술입니다. ORM은 데이터베이스 테이블과 객체 사이의 매핑을 담당하여 데이터베이스 작업을 추상화하고, 개발자가 직접 SQL 쿼리를 작성하지 않고도 데이터베이스를 조작할 수 있도록 도와줍니다.

이 글에서는 Python에서 주로 사용되는 ORM 라이브러리인 SQLAlchemy를 사용하여 데이터베이스 릴레이션을 관리하는 방법에 대해 알아보겠습니다.

SQLAlchemy 소개

SQLAlchemy는 Python에서 가장 인기 있는 ORM 라이브러리 중 하나입니다. 이 라이브러리는 데이터베이스에 대한 접속 및 연결 관리, 테이블 및 스키마 생성, 데이터 쿼리 및 조작 등을 쉽게 할 수 있도록 도와줍니다.

SQLAlchemy는 2가지 주요 인터페이스를 제공합니다. 첫 번째는 Core API로, 이를 사용하여 SQL 쿼리를 직접 작성하고 실행할 수 있습니다. 두 번째는 ORM API로, 객체 지향 프로그래밍 스타일로 데이터베이스 조작을 할 수 있도록 도와줍니다.

ORM 모델 정의

ORM을 사용하여 데이터베이스 테이블을 객체로 표현하기 위해서는 ORM 모델을 정의해야 합니다. 아래는 SQLAlchemy를 사용하여 ORM 모델을 정의하는 예제입니다.

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

위 예제에서는 Base 클래스를 상속받아 User 클래스를 정의하였습니다. __tablename__ 속성을 사용하여 테이블 이름을 지정하고, Column 클래스를 사용하여 컬럼을 정의합니다.

데이터베이스 연결

SQLAlchemy를 사용하여 데이터베이스에 연결하려면, 사용할 데이터베이스 종류와 연결 정보를 지정해야 합니다. 아래는 PostgreSQL 데이터베이스에 연결하는 예제입니다.

from sqlalchemy import create_engine

engine = create_engine('postgresql://username:password@localhost/mydatabase')

위 예제에서는 create_engine 함수를 사용하여 PostgreSQL 데이터베이스에 연결을 설정하였습니다. 연결 정보는 URL 형식으로 지정하며, 사용자 이름, 비밀번호, 호스트 및 데이터베이스 이름을 포함해야 합니다.

테이블 생성

ORM 모델을 사용하여 데이터베이스에 테이블을 생성하려면, create_all 메서드를 호출하여 모델을 기반으로 자동으로 테이블을 생성할 수 있습니다.

Base.metadata.create_all(engine)

위 예제에서는 Base.metadata.create_all 메서드를 사용하여 engine에 연결된 데이터베이스에 User 테이블을 생성하였습니다.

데이터 조작

ORM을 사용하여 데이터베이스에서 데이터를 가져오거나 조작하려면, Session 객체를 사용해야 합니다. Session 객체를 사용하여 데이터베이스 테이블에 데이터를 추가하거나 수정, 삭제할 수 있습니다.

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

# 데이터 추가
user = User(name='John', email='john@example.com')
session.add(user)
session.commit()

# 데이터 조회
users = session.query(User).all()

# 데이터 수정
user.name = 'John Smith'
session.commit()

# 데이터 삭제
session.delete(user)
session.commit()

위 예제에서는 session 객체를 사용하여 데이터베이스 테이블에 데이터를 추가, 조회, 수정, 삭제하는 방법을 보여주었습니다.

결론

ORM은 데이터베이스와 객체 지향 프로그래밍 언어 간의 매핑을 쉽게 관리할 수 있도록 도와주는 강력한 도구입니다. SQLAlchemy를 사용하여 Python에서 ORM을 적용할 수 있으며, 데이터베이스 테이블의 생성, 데이터 조작 등을 간편하게 할 수 있습니다.

ORM을 사용함으로써 개발자는 직접 SQL 쿼리를 작성하는 번거로움을 줄이고, 객체 지향 프로그래밍으로 데이터베이스를 다룰 수 있는 장점을 활용할 수 있습니다.