Programming

[Python] SQLAlchemy : ORM 쿼리 결과 부분 조회 처리 (4)

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

[Python] SQLAlchemy : ORM 쿼리 결과 부분 조회 처리(4)


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

SQLAlchemy에서 쿼리의 결과를 가져오는 메서드로는 first(), one(), all() 등이 있습니다.


1. first() 메서드

first() 메서드는 쿼리의 첫 번째 결과를 반환하며, 결과가 없는 경우 None을 반환합니다. first() 메서드는 주로 결과가 하나일 때 사용합니다.

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

 

2. one() 메서드

one() 메서드는 쿼리의 결과가 정확히 하나일 때 사용합니다. 만약 결과가 하나가 아니거나 결과가 없을 경우에는 sqlalchemy.orm.exc.NoResultFound 혹은 sqlalchemy.orm.exc.MultipleResultsFound 예외가 발생합니다.

one_user = session.query(User).filter_by(id=1).one()

 

3. all() 메서드

all() 메서드는 쿼리의 결과를 모두 리스트 형태로 반환합니다.

all_users = session.query(User).all()

 
위 메서드들을 사용할 때, first()나 one()과 같은 단일 결과를 반환하는 메서드는 결과가 없거나 여러 개일 경우 예외가 발생할 수 있기 때문에 주의해야 합니다. 이러한 상황에서 예외를 처리하기 위해서는 try-except 구문을 사용하여 예외를 처리해주어야 합니다.

 

예외 처리

다음은 one() 메서드를 사용할 때, 결과가 없거나 여러 개일 경우 예외가 발생하는 상황입니다.

from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound

try:
    one_user = session.query(User).filter_by(name='John').one()
except NoResultFound:
    print("No user found.")
except MultipleResultsFound:
    print("Multiple users found.")

 
위 예시에서는 one() 메서드를 사용하여 'name'이 'John'인 유저를 찾는데, 결과가 없는 경우 NoResultFound 예외가 발생하며, 결과가 여러 개인 경우 MultipleResultsFound 예외가 발생합니다. 이러한 예외를 처리하기 위해 try-except 구문을 사용하여 각각의 예외를 처리해주고 있습니다.

위와 같이 예외 처리를 해주면, 예외가 발생할 경우에도 프로그램이 멈추지 않고 예외 처리가 가능해집니다. 이러한 예외 처리는 데이터베이스에서 데이터를 가져오는 작업에서 매우 중요합니다.
 

 


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

728x90
반응형