Programming

[Python] SQLAlchemy: ORM Filter로 조회 조건 활용(2) - filter

IT오이시이 2023. 4. 6. 08:03
728x90

[Python] SQLAlchemy: ORM Filter로 조회 조건 활용(2) - filter

 

[SQLAlchemy  활용 목차]
[Python] SQLAlchemy: ORM(Object Relational Mapping)
1. 객체 기반 데이터 활용 SQLAlchemy ORM 개요
2. ORM Filter로 조회 조건 활용
3. ORM filter_by로 데이터 필터링 활용
4. ORM 쿼리 결과 부분 조회 처리
5. ORM을 이용한 테이블 조회 활용 예시​

SQLAlchemy의 filter (조건문)

SQLAlchemy는 Python에서 사용하는 ORM(Object-Relational Mapping) 라이브러리 중 하나입니다. ORM은 객체 지향 프로그래밍과 관계형 데이터베이스의 데이터를 매핑하는 기술을 제공합니다. 
SQLAlchemy의 filter 메서드는 ORM을 사용할 때 데이터베이스에서 쿼리할 때 조건문으로 사용됩니다.

filter 메서드는 SQLAlchemy의 Query 객체에서 호출됩니다. Query 객체는 SQLAlchemy에서 생성되며 데이터베이스에서 데이터를 가져오기 위한 메소드를 제공합니다. filter 메서드는 WHERE 절에 해당하는 조건을 지정하여 데이터를 필터링할 수 있습니다.

예를 들어, 다음과 같은 SQL 문을 작성한다고 가정해보겠습니다.

SELECT * FROM users WHERE age > 20 AND gender = 'M';

 
이 쿼리를 SQLAlchemy로 작성하면 다음과 같습니다.

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

engine = create_engine('postgresql://username:password@localhost/mydatabase')
Session = sessionmaker(bind=engine)
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)
    gender = Column(String)

session = Session()
query = session.query(User).filter(User.age > 20, User.gender == 'M')
result = query.all()

 
위 코드에서, filter 메서드는 User 테이블에서 age > 20 과 gender = 'M' 조건에 맞는 데이터를 필터링합니다. 이렇게 필터링된 데이터는 all 메서드로 가져와서 result 변수에 할당됩니다. 이렇게 필터링된 데이터를 추가로 조작하거나, 저장하거나, 삭제할 수 있습니다.
 

SQLAlchemy  - filter 의 종류

SQLAlchemy의 filter 메서드는 데이터베이스에서 쿼리할 때 사용되며, WHERE 절에 해당하는 조건을 지정하여 데이터를 필터링합니다. filter 메서드는 다양한 조건식을 사용하여 데이터를 필터링할 수 있습니다. 아래는 SQLAlchemy의 filter 메서드에서 사용되는 주요 조건식에 대한 설명입니다.

비교 연산자 (Comparison Operators)


1. == (equal to)

이 조건식은 필드 값이 지정한 값과 같은 경우에 데이터를 필터링합니다. 예를 들어, 다음과 같은 코드는 User 테이블에서 name 필드가 'Alice'인 데이터를 필터링합니다.

query = session.query(User).filter(User.name == 'Alice')

 

2. != (not equal to)

이 조건식은 필드 값이 지정한 값과 다른 경우에 데이터를 필터링합니다. 예를 들어, 다음과 같은 코드는 User 테이블에서 name 필드가 'Bob'이 아닌 데이터를 필터링합니다.

query = session.query(User).filter(User.name != 'Bob')

 

3.  >  (greater than) 

이 조건식은 필드 값이 지정한 값보다 큰 경우에 데이터를 필터링합니다. 예를 들어, 다음과 같은 코드는 User 테이블에서 age 필드가 20보다 큰 데이터를 필터링합니다.

query = session.query(User).filter(User.age > 20)

 

4. < (less than)

이 조건식은 필드 값이 지정한 값보다 작은 경우에 데이터를 필터링합니다. 예를 들어, 다음과 같은 코드는 User 테이블에서 age 필드가 30보다 작은 데이터를 필터링합니다.

query = session.query(User).filter(User.age < 30)

 

5. = (greater than or equal to)

이 조건식은 필드 값이 지정한 값보다 크거나 같은 경우에 데이터를 필터링합니다. 예를 들어, 다음과 같은 코드는 User 테이블에서 age 필드가 20 이상인 데이터를 필터링합니다.

query = session.query(User).filter(User.age >= 20)

 

6. <= (less than or equal to)

이 조건식은 필드 값이 지정한 값보다 작거나 같은 경우에 데이터를 필터링합니다. 예를 들어, 다음과 같은 코드는 User 테이블에서 age 필드가 30 이하인 데이터를 필터링합니다.

query = session.query(User).filter(User.age <= 30)

 

논리 연산자 (Logical Operators)

 

7.논리 연산자 (Logical Operators)

논리 연산자는 AND, OR, NOT 등을 사용하여 여러 개의 조건을 결합하여 데이터를 필터링합니다. 예를 들어, User 테이블에서 age가 20보다 크고, gender가 'M'인 데이터를 가져오는 코드는 다음과 같습니다.

query = session.query(User).filter(User.age > 20, User.gender == 'M')

 

8. LIKE 연산자 (LIKE Operator)

이 조건식은 필드 값이 지정한 문자열을 포함하는 경우에 데이터를 필터링합니다. 예를 들어, 다음과 같은 코드는 User 테이블에서 name 필드가 'A'로 시작하는 데이터를 필터링합니다.

query = session.query(User).filter(User.name.like('A%'))

 

9. IN 연산자 (IN Operator)

IN 연산자는 SQL에서 사용하는 IN 연산자와 유사한 방식으로 여러 개의 값 중에 하나와 일치하는 데이터를 필터링합니다. 예를 들어, User 테이블에서 age가 20, 25, 30인 데이터를 가져오는 코드는 다음과 같습니다.

query = session.query(User).filter(User.age.in_([20, 25, 30]))

 

10. NOT IN 연산자 (NOT IN Operator)

NOT IN 연산자는 IN 연산자와 유사하지만, 일치하지 않는 데이터를 필터링합니다. 예를 들어, User 테이블에서 age가 20, 25, 30이 아닌 데이터를 가져오는 코드는 다음과 같습니다.

query = session.query(User).filter(~User.age.in_([20, 25, 30]))

 

11. IS NOT NULL 대체  is_(None) 메서드

is_(None), isnot(None) 메서드는 IS NULL, IS NOT NULL 연산자와 같이  NULL인  비교하여 데이터를 필터링합니다.

query = session.query(User).filter(User.age.is_(None))     # IS NULL
query = session.query(User).filter(User.age.isnot(None))  # IS NOT NULL

 


[SQLAlchemy  활용 목차]
[Python] SQLAlchemy: ORM(Object Relational Mapping)
1. 객체 기반 데이터 활용 SQLAlchemy ORM 개요
2. ORM Filter로 조회 조건 활용
3. ORM filter_by로 데이터 필터링 활용
4. ORM 쿼리 결과 부분 조회 처리
5. ORM을 이용한 테이블 조회 활용 예시​

728x90
반응형