[python] SQLAlchemy를 사용한 RESTful API 개발

SQLAlchemy는 Python에서 사용되는 오픈 소스 ORM(Object-Relational Mapping) 라이브러리입니다. 이를 사용하여 간단하고 효율적인 RESTful API를 개발할 수 있습니다.

1. SQLAlchemy 설치

먼저 SQLAlchemy를 설치해야 합니다. pip를 사용하여 다음과 같이 설치할 수 있습니다.

pip install SQLAlchemy

2. 데이터베이스 연결

SQLAlchemy를 사용하여 데이터베이스에 연결해야 합니다. 다음과 같이 연결할 수 있습니다.

from sqlalchemy import create_engine

# 데이터베이스 URL 설정
db_url = "postgresql://username:password@localhost:5432/database"

# 데이터베이스 연결
engine = create_engine(db_url)

3. 모델 정의

다음으로 ORM을 사용하여 모델을 정의해야 합니다. 간단한 예제를 살펴보겠습니다.

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

# Base 클래스 정의
Base = declarative_base()

# 모델 클래스 정의
class User(Base):
    __tablename__ = 'users'

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

    def __repr__(self):
        return f"<User(id={self.id}, name={self.name}, email={self.email})>"

위 예제는 User 모델을 정의하는 방법입니다. User 모델은 id, name, email 속성을 가지고 있습니다.

4. API 엔드포인트 구현

API 엔드포인트를 구현하기 위해 Flask를 사용하겠습니다. Flask는 간단하고 가벼운 웹 프레임워크입니다.

from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy

# Flask 애플리케이션 생성
app = Flask(__name__)

# SQLAlchemy 설정
app.config['SQLALCHEMY_DATABASE_URI'] = db_url
db = SQLAlchemy(app)

# API 엔드포인트 구현
@app.route('/users', methods=['GET'])
def get_users():
    users = db.session.query(User).all()
    return jsonify([{'id': user.id, 'name': user.name, 'email': user.email} for user in users])

@app.route('/users', methods=['POST'])
def create_user():
    data = request.get_json()
    user = User(name=data['name'], email=data['email'])
    db.session.add(user)
    db.session.commit()
    return jsonify({'status': 'success', 'message': 'User created'})

# 애플리케이션 실행
if __name__ == '__main__':
    app.run()

위 예제는 /users 엔드포인트를 구현한 것입니다. GET 메서드로 호출할 경우 모든 사용자의 정보를 반환하고, POST 메서드로 호출할 경우 새로운 사용자를 생성합니다.

결론

SQLAlchemy를 사용하면 Python으로 간단하고 효율적인 RESTful API를 개발할 수 있습니다. SQLAlchemy의 강력한 ORM 기능을 활용하여 데이터베이스와의 상호 작용을 쉽게 처리할 수 있습니다.