SQLAlchemy 사용법
## 개요
SQLAlchemy는 파이썬의 SQL Toolkit 및 Object Relational Mapping(ORM) 라이브러리입니다. 데이터베이스 작업을 단순화하고 Pythonic하게 데이터베이스를 다룰 수 있도록 도와줍니다.
---
## 주요 구성 요소
1. **Engine**: 데이터베이스와의 연결을 관리합니다.
2. **Session**: ORM에서 트랜잭션을 관리하고, 데이터베이스 작업을 수행하는 주요 인터페이스입니다.
3. **Declarative Base**: ORM에서 사용하는 클래스를 정의하기 위한 기반 클래스입니다.
4. **Query**: ORM에서 데이터를 조회하는 데 사용됩니다.
---
## 기본 사용 흐름
### 1. 설치
```
pip install sqlalchemy
```
### 2. 데이터베이스 연결 설정
```
from sqlalchemy import create_engine
# SQLite 예시
db_url = "sqlite:///example.db"
engine = create_engine(db_url, echo=True) # echo=True는 SQL 로그를 출력합니다.
```
### 3. 모델 정의
```
from sqlalchemy.orm 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)
def __repr__(self):
return f"<User(name={self.name}, age={self.age})>"
```
### 4. 데이터베이스 테이블 생성
```
Base.metadata.create_all(engine) # 정의한 모델 기반으로 테이블 생성
```
### 5. 세션 생성 및 데이터 조작
```
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
# 데이터 추가
new_user = User(name="Alice", age=25)
session.add(new_user)
session.commit()
# 데이터 조회
users = session.query(User).all()
print(users)
# 데이터 수정
user = session.query(User).filter_by(name="Alice").first()
user.age = 26
session.commit()
# 데이터 삭제
session.delete(user)
session.commit()
```
---
## 고급 기능
### 1. 관계 정의
```
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
class Post(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True)
title = Column(String)
content = Column(String)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", back_populates="posts")
User.posts = relationship("Post", order_by=Post.id, back_populates="user")
```
### 2. 복잡한 쿼리
```
# 필터링과 정렬
users = session.query(User).filter(User.age > 20).order_by(User.name).all()
# 조인 쿼리
posts = session.query(Post).join(User).filter(User.name == "Alice").all()
```
---
## 참고 자료
- [SQLAlchemy 공식 문서](https://www.sqlalchemy.org/)
- SQLAlchemy ORM Tutorial