[python] SQLAlchemy에서 데이터 필터링 방법

SQLAlchemy는 파이썬에서 사용할 수 있는 강력한 ORM(Object-Relational Mapping) 라이브러리입니다. ORM을 사용하면 SQL 쿼리를 작성하지 않고도 데이터베이스에 대한 작업을 수행할 수 있습니다. 이번 포스트에서는 SQLAlchemy를 사용하여 데이터를 필터링하는 방법에 대해 알아보겠습니다.

1. 필터링 개요

SQLAlchemy에서 데이터를 필터링하는 방법은 filter() 함수를 사용하는 것입니다. filter() 함수는 where 절을 대체하여 데이터베이스에서 조건에 맞는 데이터를 검색합니다.

2. 단일 조건 필터링

가장 간단한 방법은 단일 조건에서 데이터를 필터링하는 것입니다. 예를 들어, users 테이블에서 age가 30보다 큰 사용자를 찾고 싶다고 가정해 보겠습니다.

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

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# 데이터베이스 연결 및 세션 생성
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()

# 필터링하여 데이터 가져오기
filtered_users = session.query(User).filter(User.age > 30).all()

위의 예시에서 filter() 함수를 사용하여 User.age > 30 조건을 추가했습니다. query() 함수를 통해 User 모델을 선택하고, filter() 함수를 사용하여 조건을 추가한 후 all() 함수로 결과를 가져옵니다.

3. 다중 조건 필터링

여러 조건을 사용하여 데이터를 필터링할 수도 있습니다. 예를 들어, users 테이블에서 age가 30보다 크고 name이 ‘John’인 사용자를 찾고 싶다면 다음과 같이 작성할 수 있습니다.

filtered_users = session.query(User).filter(User.age > 30, User.name == 'John').all()

여러 조건을 추가할 때는 ,를 사용하여 조건을 구분합니다.

4. 조건 결합하기

조건을 결합하여 더 복잡한 필터링을 수행할 수도 있습니다. 주어진 예제에서는 age가 30보다 크면서 name이 ‘John’이거나 ‘Jane’인 사용자를 찾으려면 or_ 함수를 사용하여 조건을 결합할 수 있습니다.

from sqlalchemy import or_

filtered_users = session.query(User).\
    filter(User.age > 30).\
    filter(or_(User.name == 'John', User.name == 'Jane')).all()

조건을 결합할 때는 or_ 함수를 사용하여 or 연산을 수행합니다. 또한, 여러 개의 filter() 함수를 사용할 때는 각각을 개행하여 작성하면 가독성이 좋아집니다.

5. 추가적인 필터링 조건

SQLAlchemy에서는 다양한 필터링 조건을 사용할 수 있습니다. 일반적인 예로는 like() 함수를 사용하여 특정 문자열이 포함된 데이터를 찾는 것이 있습니다.

filtered_users = session.query(User).filter(User.name.like('%doe%')).all()

위의 예시에서는 like() 함수를 사용하여 name 속성에 %doe% 문자열이 포함된 데이터를 찾습니다. %는 어떤 문자열이든 매칭되는 와일드카드입니다.

마무리

이번 포스트에서는 SQLAlchemy를 사용하여 데이터를 필터링하는 방법에 대해 알아보았습니다. SQLAlchemy의 filter() 함수와 다양한 조건을 사용하여 데이터베이스에서 필요한 데이터를 검색할 수 있습니다. 추가로 필요한 내용은 SQLAlchemy 공식 문서를 참조하시기 바랍니다.

참고 자료