[파이썬] ORM을 사용한 CRUD(Create, Read, Update, Delete) 작업

ORM(Object-Relational Mapping)은 데이터베이스와 애플리케이션 사이에서 객체와 관계형 데이터베이스의 데이터를 변환하는 기술입니다. 이를 통해 쉽고 효율적으로 데이터베이스 작업을 수행할 수 있습니다.

Python에는 다양한 ORM 라이브러리가 있지만, 이 글에서는 가장 인기 있는 SQLAlchemy를 사용하여 CRUD 작업을 설명하겠습니다. SQLAlchemy는 Python에서 RDBMS를 처리하기 위한 강력한 도구로, ORM 패턴을 따르고 있습니다.

준비 작업

먼저 SQLAlchemy를 설치해야 합니다. 아래 명령을 사용하여 설치할 수 있습니다:

pip install sqlalchemy

또한, 적절한 데이터베이스 드라이버도 설치해야 합니다. 예를 들어, PostgreSQL을 사용한다면 psycopg2를 설치해야 합니다:

pip install psycopg2

그리고 SQLAlchemy의 create_engine 함수를 사용하여 데이터베이스 연결을 설정해야 합니다:

from sqlalchemy import create_engine

# 데이터베이스 URL 형식: dialect+driver://username:password@host:port/database
db_url = 'postgresql://username:password@localhost:5432/mydatabase'
engine = create_engine(db_url)

Create(C)

데이터베이스에 새로운 레코드를 추가하는 작업은 Create(C) 작업입니다. SQLAlchemy에서는 데이터베이스 테이블을 클래스로 정의하고, 이를 통해 새로운 레코드를 생성할 수 있습니다. 예를 들어, 다음과 같이 User 테이블을 정의하고 새로운 사용자를 생성할 수 있습니다:

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)

# 새로운 사용자 생성
new_user = User(name='John Doe', email='john@example.com')

with engine.begin() as conn:
    conn.add(new_user)

Read(R)

데이터베이스에서 레코드를 조회하는 작업은 Read(R) 작업입니다. SQLAlchemy에서는 쿼리를 작성하여 원하는 레코드를 조회할 수 있습니다. 예를 들어, 다음과 같이 User 테이블에서 이름이 ‘John Doe’인 사용자를 조회할 수 있습니다:

from sqlalchemy.orm import sessionmaker

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

# 이름이 'John Doe'인 사용자 조회
john = session.query(User).filter_by(name='John Doe').first()

Update(U)

데이터베이스의 레코드를 수정하는 작업은 Update(U) 작업입니다. SQLAlchemy에서는 조회한 레코드를 수정하고, 세션을 커밋하여 변경 사항을 저장할 수 있습니다. 예를 들어, 다음과 같이 john 사용자의 이메일을 수정할 수 있습니다:

john.email = 'john.doe@example.com'

with session.begin() as conn:
    conn.commit()

Delete(D)

데이터베이스에서 레코드를 삭제하는 작업은 Delete(D) 작업입니다. SQLAlchemy에서는 조회한 레코드를 삭제하고, 세션을 커밋하여 변경 사항을 저장할 수 있습니다. 예를 들어, 다음과 같이 john 사용자를 삭제할 수 있습니다:

with session.begin() as conn:
    conn.delete(john)
    conn.commit()

마무리

SQLAlchemy를 사용하면 Python에서 간단하게 CRUD 작업을 수행할 수 있습니다. ORM을 사용하여 개발하는 것은 데이터베이스 작업을 추상화하기 때문에 코드의 유지보수성과 생산성을 향상시킬 수 있습니다. SQLAlchemy의 자세한 내용은 공식 문서를 참조하시기 바랍니다.

참고 자료: