How to make a subquery in sqlalchemy
서브쿼리 만들기
subquery = session.query(A.id).filter(A.something==2000).subquery()
query = session.query(B).filter(B.something1.in_(subquery))
or
subquery = session.query(A.id).filter(A.something==2000).subquery()
query = session.query(B).\
filter(B.somethings.in_(subquery)).\
update({"key": value}, synchronize_session='fetch')
---
synchronize_session=evaluate
파이썬에 생성된 쿼리를 곧바로 평가해서 세션으로부터 제거되어야 할 객체를 결정한다. evaluate는 기본값이고 효율적이지만, 견고하지 않고 복잡한 쿼리는 evaluate될 수 없다. 만약 쿼리를 evaluate할 수 없다면, sqlalchemy.orm.evaluator.UnevaluatableError를 발생시킨다.
synchronize_session=fetch
삭제되기 전에 select 쿼리를 수행하고 해당 결과를 사용해서 어떤 객체들이 세션에서 삭제되어야 할지 결정한다. 덜 효율적이지만 유효한 쿼리를 다룰 수 있게 된다.
synchronize_session=False
세션 갱신을 시도하지 않기 때문에 매우 효율적이다. 그러나 삭제한 후에 세션을 사용하려고 하면 부정확한 결과를 얻을 수 있다.
반응형
'SW ENGINEERING > SqlAlchemy' 카테고리의 다른 글
[SQLAlchemy] update (0) | 2022.03.08 |
---|---|
[SQLAlchemy] flush vs commit (0) | 2022.03.08 |
최근댓글