Programming Language/Python

[SQLAlchemy] 7. 데이터베이스 ORM 상태 관리

LeeJaeJun 2024. 6. 22. 15:53
728x90
반응형

데이터베이스 ORM 상태 관리

  • ORM에서 클래스데이터베이스 테이블을 나타내고, 클래스의 인스턴스데이터베이스의 행을 나타냄
  • Instance 생성: 처음 instance 생성 후에는 transient 상태(아직 데이터베이스 session과 연결되어 있지 않은 상태)
squidward = User(name="squidward", fullname="Squidward Tentacles")
krabs = User(name="ehkrabs", fullname="Eugene H. Krabs")
  • Session 추가: 추가 후 instance들은 pending 상태(데이터베이스에 삽입할 준비가 됨)
session = Session(engine)
session.add(squidward)
session.add(krabs)
  • Flushing: 현재의 상태를 데이터베이스와 동기화. Transaction을 커밋하는 것이 아니기에 변경 사항이 데이터베이스에 영구적으로 저장 된 상태는 아님 (rollback()을 통해 변경사항을 취소 가능)
session.flush()
  • Commit: 변경 사항을 영구적으로 저장. 세션과 연결된 객체의 속성이 만료되어, 다음에 접근할 때 새 transaction을 시작하고 데이터베이스에서 다시 로드 해야 함. (rollback()으로 변경사항 취소 불가능) (세션을 닫는 것은 아님)
session.commit()
  • Rollback: 롤백을 하면 세션에 연결된 모든 객체의 상태가 만료되고 다음에 접근할 때 다시 로드 (변경사항이 반영되지 않고 다시 예전 상태로) (lazy loading mechanism)
session.rollback()
  • 세션 닫기: 세션을 명시적으로 닫아 리소스를 해제. 세션과 연결된 모든 객체가 분리 상태가 되어, 더 이상 세션과 상호작용할 수 없음
session.close()

 

728x90
반응형