테스트 사이트 - 개발 중인 베타 버전입니다

트랜젝션/리퀘스트 간 DB 세션 데이터 이슈

· 1년 전 · 214 · 1
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)) 로 세션 객체의 아이디를 확인해보니 모두 동일합니다.


리퀘스트/작업변경/ 트렌젝션이 다르거나 새로 시작되면 세션을 새로 생성해야하며

트렌젝션, 작업단위 내에서는 세션 변수를 전달함으로서 동일 작업을 유지할 수있습니다.

![image](https://github.com/gnuboard/g6/assets/114769749/46b69495-5bea-4186-9aeb-a83eb8b0712b)

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 1개

1년 전
그냥 지금상태에서는 생성자에 있는 세션메이커를 get 으로 옮기시면 될꺼예요

게시글 목록

번호 제목
290
284
282
281
279
277
275
272
263
258
257
256
255
252
251
244
243
239
236
235