[파이썬] 데이터베이스 연동과 ORM(Object-Relational Mapping)

데이터베이스는 대부분의 웹 애플리케이션에서 중요한 부분입니다. 데이터베이스를 효과적으로 관리하고 사용하기 위해서는 데이터베이스와 애플리케이션 간의 연동이 필요합니다. Python은 다양한 데이터베이스와의 연동을 지원하며, 이를 간편하게 처리하기 위해 ORM(Object-Relational Mapping) 도구를 사용할 수 있습니다. 이 글에서는 Python을 사용하여 데이터베이스와의 연동을 어떻게 처리하는지와 ORM의 개념에 대해 알아보겠습니다.

데이터베이스 연동

Python에서는 다양한 데이터베이스와의 연동을 지원하는 여러 라이브러리가 있습니다. 대표적으로 sqlite3, MySQLdb, psycopg2, pymongo 등이 있습니다. 이러한 라이브러리를 사용하여 데이터베이스와의 연결을 설정하고, SQL 쿼리를 실행하여 데이터를 조회, 추가, 수정, 삭제할 수 있습니다.

예시 코드 - SQLite3 연동

import sqlite3

# 데이터베이스 연결 생성
conn = sqlite3.connect('mydatabase.db')

# 커서 객체 생성
cursor = conn.cursor()

# 테이블 생성 쿼리 실행
cursor.execute('''CREATE TABLE IF NOT EXISTS users
                  (id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL)''')
                  
# 데이터 삽입 쿼리 실행
cursor.execute("INSERT INTO users (id, name) VALUES (1, 'John')")

# 커밋
conn.commit()

# 데이터 조회 쿼리 실행
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 연결 종료
conn.close()

위의 코드는 SQLite3 데이터베이스와의 연동을 보여주는 예시입니다. sqlite3 모듈을 사용하여 데이터베이스와의 연결을 생성하고, 커서 객체를 통해 SQL 쿼리를 실행하여 데이터를 조작 및 조회하는 과정을 보여줍니다. 이와 마찬가지로 다른 데이터베이스 라이브러리를 사용하는 방법도 유사합니다.

ORM(Object-Relational Mapping)

ORM은 데이터베이스와 객체 지향 프로그래밍 언어 간의 관계를 매핑해주는 도구입니다. 데이터베이스 테이블과 객체 사이의 변환 작업을 자동화하여 개발자가 SQL 쿼리 작성 없이 데이터베이스를 조작할 수 있게 도와줍니다.

Python에서는 다양한 ORM 도구를 사용할 수 있습니다. 대표적으로 SQLAlchemy, Django ORM, Pony ORM 등이 있습니다. 이러한 ORM 도구를 사용하면 SQL 쿼리 대신 Python 코드를 이용하여 데이터베이스를 조작할 수 있으며, 객체 간의 관계를 표현하고 데이터를 추상화하여 처리할 수 있습니다.

예시 코드 - SQLAlchemy 사용

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

# 데이터베이스 연결 생성
engine = create_engine('sqlite:///mydatabase.db', echo=True)

# 기반 클래스 생성
Base = declarative_base()

# 사용자 모델 클래스 정의
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)

# 데이터베이스 생성
Base.metadata.create_all(bind=engine)

# 객체 생성 및 데이터 추가
user = User(name='John')
session.add(user)
session.commit()

# 데이터 조회
users = session.query(User).all()
for user in users:
    print(user.name)

위의 코드는 SQLAlchemy 라이브러리를 사용하여 ORM을 구현한 예시입니다. create_engine 함수를 사용하여 데이터베이스와의 연결을 생성하고, Base 클래스를 상속받아 모델 클래스를 정의합니다. 이후에는 Python 객체를 생성하고, session 객체를 통해 데이터베이스와의 작업을 수행합니다. SQLAlchemy를 사용하면 SQL 쿼리 없이도 간단하게 데이터베이스를 조작할 수 있습니다.

마무리

Python을 사용하여 데이터베이스와의 연동을 처리하는 방법과 ORM을 소개했습니다. 데이터베이스 연동은 웹 애플리케이션 개발에서 핵심적인 부분이므로, 어떤 방식을 선택하느냐에 따라 개발 효율과 유지 보수성이 크게 달라질 수 있습니다. 데이터베이스 연동과 ORM에 대해 더 자세히 공부해보면 Python을 이용한 웹 애플리케이션 개발에 도움이 될 것입니다.