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

개요

ORM(Object-Relational Mapping)은 개발자가 데이터베이스를 조작하기 위해 SQL 쿼리를 직접 작성하는 것이 아니라, 객체 지향 프로그래밍 언어를 사용하여 데이터베이스와 상호 작용할 수 있는 기술입니다. ORM을 사용하면 데이터베이스 테이블을 클래스로 매핑하고, 객체의 속성을 데이터베이스 레코드의 컬럼으로 매핑할 수 있습니다. 이를 통해 개발자들은 SQL 쿼리를 직접 작성해야 하는 번거로움을 줄이고, 객체 지향적인 프로그래밍으로 데이터베이스를 다룰 수 있습니다.

이번 블로그 포스트에서는 파이썬에서 주로 사용되는 ORM 라이브러리인 SQLAlchemy를 사용하여 데이터베이스 릴레이션 관리를 할 수 있는 방법에 대해 알아보겠습니다.

SQLAlchemy 소개

SQLAlchemy는 파이썬에서 유연하고 강력한 ORM 기능을 제공하는 라이브러리입니다. SQLAlchemy는 다양한 데이터베이스 시스템과 호환되며, ORM을 위한 다양한 도구와 패턴을 제공합니다. SQLAlchemy를 사용하면 데이터베이스에 대한 저수준의 직접 쿼리를 작성할 수도 있고, ORM을 통해 객체 지향적인 방식으로 데이터베이스를 다룰 수도 있습니다.

SQLAlchemy 설치하기

SQLAlchemy는 pip를 통해 간단하게 설치할 수 있습니다.

pip install sqlalchemy

데이터베이스 연결하기

SQLAlchemy를 사용하여 데이터베이스와 연결하려면, create_engine 함수를 사용하여 연결 문자열을 생성하고, create_engine 함수의 인자로 전달합니다. 연결 문자열은 데이터베이스의 유형과 로컬이나 원격 서버의 정보를 포함합니다.

from sqlalchemy import create_engine

# SQLite 데이터베이스에 연결하는 예시
engine = create_engine('sqlite:///mydatabase.db')

# PostgreSQL 데이터베이스에 연결하는 예시
engine = create_engine('postgresql://user:password@localhost/mydatabase')

# MySQL 데이터베이스에 연결하는 예시
engine = create_engine('mysql://user:password@localhost/mydatabase')

데이터베이스 테이블 매핑하기

SQLAlchemy의 ORM 기능을 사용하여 데이터베이스 테이블을 클래스로 매핑할 수 있습니다. 테이블을 클래스로 매핑하는 작업을 테이블 생성과 동시에 수행할 수도 있고, 이미 존재하는 테이블에 대한 매핑을 수행할 수도 있습니다.

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

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

위의 예시에서 User 클래스는 users 테이블과 매핑됩니다. 클래스의 속성은 데이터베이스 테이블의 컬럼으로 매핑됩니다.

데이터베이스 조작하기

SQLAlchemy를 사용하여 데이터베이스를 조작하기 위해, 세션(Session) 객체를 사용합니다. 세션은 ORM 객체의 생성, 수정, 삭제 등의 작업을 추적하고 커밋(commit)하여 데이터베이스에 반영하는 역할을 합니다.

from sqlalchemy.orm import sessionmaker

# Session 객체 생성
Session = sessionmaker(bind=engine)
session = Session()

# 사용자 생성
user = User(name='John Doe', age=25)
session.add(user)

# 변경 사항 커밋
session.commit()

위의 예시에서는 SQLAlchemy sessionmaker를 사용하여 세션 객체를 생성하고, add 메서드를 사용하여 객체를 세션에 추가한 뒤 commit 메서드를 호출하여 변경 사항을 데이터베이스에 반영합니다.

ORM을 사용하여 데이터베이스 릴레이션 관리를 한다면 개발자는 SQL 쿼리를 직접 작성하지 않아도 됩니다. 대신 객체 지향 프로그래밍의 개념과 문법을 활용하여 데이터베이스 작업을 수행할 수 있습니다. SQLAlchemy를 사용하면 데이터베이스 연결, 테이블 매핑, 데이터 조작 등 다양한 작업을 간단하게 처리할 수 있습니다.