5.3.3 SQLAlchemy로 세션을 생성하는 방법
세션은 ORM을 사용할 때 핵심이 되는 객체로 데이터베이스와 맺어진 대화 창구(context)이며, 트랜잭션 단위를 나타내는 논리적 연결(session)을 제공합니다. 세션은 다음 기능을 합니다.
• 객체 상태 관리: ORM으로 관리하는 개체(entity, 예 User 모델의 인스턴스 객체)의 상태(“Transient”, “Pending”, “Persistent”, “Detached”)를 추적하며, 상황에 맞는 데이터베이스 동작을 INSERT, UPDATE, DELETE 중에서 실행합니다.
• 트랜잭션 관리: 세션 객체는 내부적으로 트랜잭션을 관리합니다. session.commit()을 호출하면 그동안 반영되지 않았던 모든 변경 사항을 데이터베이스에 반영하고, session.rollback()으로 실패하면 이전 상태로 되돌릴 수 있습니다. 또 서로 다른 세션이 개체를 다루어 문제가 발생할 여지가 있는 경우 오류를 일으킵니다.
• 질의문 실행: 세션은 ORM 개체를 대상으로 하는 쿼리를 실행하는 데 사용됩니다. 버전 2에서는 session.execute(statement) 패턴을 권장하며, statement는 select(), insert(), update(), delete() 같은 Core 스타일 쿼리 생성 함수를 사용하여 만듭니다.