Programming

[Python] SQLAlchemy : ORM filter와 filter_by 사용법 비교(3) - filter_by

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

[Python] SQLAlchemy : ORM filter와 filter_by 사용법 비교(3) - filter_by


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

Filter와 Filter_By는  테이블 컬럼으로 데이터 조회에 필터를 적용 합니다.

SQLAlchemy의 filter_by 메서드는 filter 메서드와 유사하게 데이터를 필터링하는데 사용되는 메서드입니다. 하지만 filter 메서드는 인자로 SQLAlchemy의 Column 객체나 표현식을 받는 반면, filter_by 메서드는 인자로 **kwargs 형식으로 Column 이름과 값을 받습니다.

예를 들어, filter_by 메서드를 이용하여 User 테이블에서 name이 'John'인 데이터를 가져오는 코드는 다음과 같습니다.

query = session.query(User).filter_by(name='John')

 
filter 메서드를 사용하면 다음과 같이 작성할 수 있습니다.

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

 
하지만, filter_by 메서드를 사용하면 더 간결하게 코드를 작성할 수 있습니다. 그러나, Column 이름과 값이 일치하는지에 대한 검증이 없기 때문에 오타에 주의해야 합니다.

filter_by 메서드는 AND 조건으로만 데이터를 필터링할 수 있으며, OR 조건 등을 추가로 사용하려면 filter 메서드를 사용해야 합니다.
 

Filter와 Filter_by 의 사용법 비교 [주의 사항]

filter_by 메서드는 인자로 Column 이름과 값을 받기 때문에, Column 이름이 동적으로 바뀌거나 또는 Column 이름에 해당하는 값이 포함된 표현식을 사용할 수 없습니다. 
예를 들어, 다음과 같은 경우에는 filter 메서드를 사용해야 합니다.


1. Column 이름이 동적으로 결정되는 경우 fileter_by 대신 filter를 사용

column_name = 'name'
query = session.query(User).filter_by(column_name='John')  # 오류 발생

위 예시에서 filter_by 메서드는 'column_name' 이라는 이름의 Column을 찾으려고 하기 때문에 오류가 발생합니다. 이 경우에는 filter 메서드를 사용하여 다음과 같이 작성할 수 있습니다.

column_name = 'name'
query = session.query(User).filter(getattr(User, column_name) == 'John')

 

2. Column 이름에 해당하는 값이 포함된 표현식을 사용하는 경우

query = session.query(User).filter_by(User.name + ' ' + User.last_name == 'John Doe')  # 오류 발생

 
위 예시에서는 User 테이블의 'name' Column과 'last_name' Column을 결합하여 'John Doe'라는 문자열과 일치하는 데이터를 찾으려고 하지만, filter_by 메서드는 이러한 표현식을 지원하지 않습니다. 이 경우에는 filter 메서드를 사용하여 다음과 같이 작성할 수 있습니다.

query = session.query(User).filter(User.name + ' ' + User.last_name == 'John Doe')

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

728x90
반응형