SQLAlchemy 에서 세션은 작업단위입니다. (UoW 패턴)
세션객체는 실행하는 쿼리의 모델 객체를 가지고 다닙니다.
따라서 리퀘스트, 트렉젝션 단위 당 세션이 달라야합니다.
현재 구현에서는 세션 객체를 프로그램(서버)종료시까지 재활용하고 있어서
트렌젝션간 또는 서로 다른 리퀘스트 간에 모델 데이터가 간섭이 일어날 가능성이 있습니다.
https://docs.sqlalchemy.org/en/20/orm/session_basics.html#what-does-the-session-do
core/database.py
def sessionLocal(self) -> sessionmaker[Session]:
print(id(self._sessionLocal))
print(id(self._sessionLocal)) 로 세션 객체의 아이디를 확인해보니 모두 동일합니다.
리퀘스트/작업변경/ 트렌젝션이 다르거나 새로 시작되면 세션을 새로 생성해야하며
트렌젝션, 작업단위 내에서는 세션 변수를 전달함으로서 동일 작업을 유지할 수있습니다.

세션객체는 실행하는 쿼리의 모델 객체를 가지고 다닙니다.
따라서 리퀘스트, 트렉젝션 단위 당 세션이 달라야합니다.
현재 구현에서는 세션 객체를 프로그램(서버)종료시까지 재활용하고 있어서
트렌젝션간 또는 서로 다른 리퀘스트 간에 모델 데이터가 간섭이 일어날 가능성이 있습니다.
https://docs.sqlalchemy.org/en/20/orm/session_basics.html#what-does-the-session-do
core/database.py
def sessionLocal(self) -> sessionmaker[Session]:
print(id(self._sessionLocal))
print(id(self._sessionLocal)) 로 세션 객체의 아이디를 확인해보니 모두 동일합니다.
리퀘스트/작업변경/ 트렌젝션이 다르거나 새로 시작되면 세션을 새로 생성해야하며
트렌젝션, 작업단위 내에서는 세션 변수를 전달함으로서 동일 작업을 유지할 수있습니다.

댓글 1개
xperia-query
1년 전
그냥 지금상태에서는 생성자에 있는 세션메이커를 get 으로 옮기시면 될꺼예요
게시글 목록
| 번호 | 제목 |
|---|---|
| 290 | |
| 284 | |
| 282 | |
| 281 | |
| 279 | |
| 277 | |
| 275 | |
| 272 | |
| 263 | |
| 258 | |
| 257 | |
| 256 | |
| 255 | |
| 252 | |
| 251 | |
| 244 | |
| 243 | |
| 239 | |
| 236 | |
| 235 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기