[python] SQLAlchemy와 Django 웹 프레임워크 연동 방법

Django는 강력한 웹 프레임워크로서 데이터베이스와의 상호작용을 쉽게 처리할 수 있도록 지원합니다. 그러나 때로는 Django의 ORM(Object-Relational Mapping)을 사용하지 않고 다른 ORM을 사용해야 할 때가 있습니다. 이때 SQLAlchemy와 Django를 연동하여 사용할 수 있습니다. SQLAlchemy는 Python에서 가장 인기있는 ORM 중 하나로, 강력하고 유연한 기능을 제공합니다.

시작하기 전에

Python 가상 환경을 설정한 후, 필요한 패키지를 설치해야 합니다. 아래와 같이 명령을 실행하여 필요한 패키지를 설치합니다.

pip install Django
pip install sqlalchemy

SQLAlchemy 모델 만들기

먼저, SQLAlchemy 모델을 정의해야 합니다. Django에서는 일반적으로 models.py 파일을 사용하여 모델을 정의하므로, SQLAlchemy 모델도 마찬가지로 models.py 파일에 정의할 수 있습니다. 예를들어, 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)
    username = Column(String(50), unique=True)
    email = Column(String(100), unique=True)

위의 코드에서 Base는 SQLAlchemy의 기본 클래스인 declarative_base()를 사용하여 클래스의 기반 클래스로 지정했습니다. User 클래스는 users 테이블과 매핑되며, id, username, email 칼럼들을 정의했습니다.

Django 설정 수정하기

Django의 settings.py 파일을 열어 수정해야 합니다. 아래와 같이 DATABASES 설정을 추가해야 하며, SQLAlchemy를 사용하도록 DATABASE_ENGINE 속성을 변경해야 합니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '<your-database-name>',
        'USER': '<your-database-user>',
        'PASSWORD': '<your-database-password>',
        'HOST': '<your-database-host>',
        'PORT': '<your-database-port>',
    }
}

DATABASES['default']['ENGINE'] = 'django.db.backends.mysql'

위의 예시에서는 PostgreSQL을 사용하므로, DATABASE_ENGINE 속성을 django.db.backends.mysql로 변경했습니다. 필요에 따라 실제 사용하는 데이터베이스 속성으로 변경하십시오.

Django와 SQLAlchemy 연동하기

Django에서 SQLAlchemy를 사용하기 위해 settings.py 파일에 다음과 같은 코드를 추가해야 합니다.

import sqlalchemy
from sqlalchemy.orm import sessionmaker

DB_ENGINE = DATABASES['default']['ENGINE']
DB_NAME = DATABASES['default']['NAME']
DB_USER = DATABASES['default']['USER']
DB_PASSWORD = DATABASES['default']['PASSWORD']
DB_HOST = DATABASES['default']['HOST']
DB_PORT = DATABASES['default']['PORT']

db = sqlalchemy.create_engine(f'{DB_ENGINE}://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}')
Session = sessionmaker(bind=db)

위의 코드는 데이터베이스 연결을 설정하고 SQLAlchemy 세션을 생성하는 역할을 합니다. SQLAlchemy 세션은 Django와 SQLAlchemy를 연동하기 위한 인터페이스 역할을 합니다.

SQLAlchemy 모델 사용하기

이제 Django에서 SQLAlchemy 모델을 사용할 수 있습니다. Django 뷰 또는 다른 곳에서 필요한 곳에서 다음과 같이 SQLAlchemy 모델을 import하고 사용할 수 있습니다.

from .models import User
from django.http import HttpResponse

def get_users(request):
    session = Session()
    users = session.query(User).all()
    session.close()

    users_data = [f"Username: {user.username}, Email: {user.email}" for user in users]
    return HttpResponse("<br>".join(users_data))

위의 예시에서는 get_users 뷰 함수를 정의하여 데이터베이스에서 모든 사용자를 검색하고, 사용자 정보를 HTTP 응답으로 반환하는 예시입니다.

SQLAlchemy와 Django를 연동하여 데이터베이스와의 상호작용을 간편하게 처리할 수 있습니다. SQLAlchemy는 Django의 ORM을 대체할 수 있는 강력한 도구이며, 복잡한 데이터베이스 작업을 보다 쉽게 처리할 수 있도록 도와줍니다.

참고 자료