[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을 이용한 테이블 조회 활용 예시
'Programming' 카테고리의 다른 글
[python] Selenium 웹스크래핑 - 제목과 내용 수집하기 (2) | 2023.04.28 |
---|---|
[Python] SQLAlchemy: ORM을 이용한 테이블 조회 활용 (5) - 응용 예시 (0) | 2023.04.11 |
[Python] SQLAlchemy : ORM 쿼리 결과 부분 조회 처리 (4) (1) | 2023.04.06 |
[Python] SQLAlchemy: ORM Filter로 조회 조건 활용(2) - filter (2) | 2023.04.06 |
[Python] SQLAlchemy: 객체 기반 데이터 활용 SQLAlchemy ORM (Object Relational Mapping)(1) (0) | 2023.04.05 |
인기있는 모바일 개발에 필요한 파이썬 개발툴 (0) | 2023.03.08 |
(python) chatGPT를 이용한 String-Buffer로 파일 쓰기 (0) | 2023.03.02 |