개발자의 길

[SQLAlchemy] SQLAlchemy 에서 DB 에 접근하는 방법 - 2

토아드 2023. 12. 18. 00:58
반응형

이전 게시글에서 DB 에 접근하는 방법과 DB 에 데이터를 반영하는 방식에 대해 설명하였는데 정리하자면 다음과 같다.

- SQLAlchemy 에서는 session 이라는 영역에 DB 에 반영할 데이터를 저장하고 있다가 flush 나 commit 등을 수행하면 DB 에 반영된다

- 이전의 DB 연결방법인 Flask app 객체를 SQLAlchemy 생성자에 전달해서 DB 커넥션을 하는 방법에서는 SQLAlchemy.session 변수로 자동 생성된 session 을 이용할 수 있다

 

이번 포스트에서는 session 을 제어하는 여러 방법을 이야기하고자 한다.

 

session 을 제어하는 방법

session.begin()

  • 이 메소드를 호출하면 해당 세션에 대한 데이터베이스 작업은 이 트랜잭션의 일부가 된다.
  • 명시적으로 트랜잭션을 시작하고 싶을 때 사용합니다.

 

session.add()

  • 새로운 객체를 현재 세션의 트랜잭션에 추가하게 된다. 아직 데이터베이스에는 커밋되지 않은 상태이다.

 

session.flush()

  • 현재 트랜잭션의 모든 변경 사항을 데이터베이스에 반영하지만, 트랜잭션을 종료하지는 않는다. 
  • 임시적으로 데이터베이스에 변경 사항을 쓰지만, 트랜잭션은 여전히 열려 있으며 롤백될 수 있다. (begin -> insert 문을 수행하고 commit 문은 수행안한 것)
  • 객체의 primary key id 와 같은 필드를 데이터베이스에서 미리 가져오고 싶을 때 유용하다.

 

session.commit()

  • 현재 트랜잭션에 대한 모든 변경 사항을 데이터베이스에 영구적으로 저장하고 트랜잭션을 종료한다. 이 시점에서는 실제로 데이터베이스에 적용되었고. rollback을 해도 돌아오지는 않는다.
  • 데이터베이스의 변경 사항을 확정하려고 할 때 사용됩니다.

 

session.rollback()

  • 현재 트랜잭션에서 발생한 모든 변경 사항을 되돌린다. 오류 발생시 DB 를 되돌리기 위해 하는 것인데, commit 되지 않은 변경 사항들을 명시적으로 되돌리는 것이다

 

session.close()

  • 현재 세션을 닫고, 사용 중인 모든 리소스를 정리하게 된다. 세션과 관련된 모든 연결과 자원이 해제되는데, 이 이후로부터는 해당 세션을 쓸수 없다

 

반응형