Sqlalchemy와 함께 게으른 관계가 아직로드되지 않았는지 알아내는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/258775

  •  06-07-2019
  •  | 
  •  

문제

sqlalchemy를 사용하면 관계가 게으른로드 될지 여부를 미리 알 수있는 방법이 있습니까?
예를 들어, 게으른 부모-> 어린이 관계와 "부모"인스턴스 X가 주어지면 쿼리를 트리거하지 않고 "X.Children"이 이미로드되어 있는지 알고 싶습니다.

도움이 되었습니까?

해결책

아이의 것을 볼 수 있다고 생각합니다 __dict__ 데이터가 이미 있는지 확인하려면 사전 속성.

다른 팁

모든 언로드 속성 (관계 및 열)의 목록을 얻을 수 있습니다. sqlalchemy.orm.attributes.instance_state(obj).unloaded.

보다: SQLALCHEMY의 관계가있는 객체를 완성하고 불필요한 쿼리를 피함

더 쉬운 방법은 사용하는 것입니다 inspect(), 동일한 결과를 제공합니다.

from sqlalchemy import inspect
from sqlalchemy.orm import lazyload

user = session.query(User).options(lazyload(User.articles)).first()
ins = inspect(user)

ins.unloaded  # <- set or properties that are not yet loaded

haes 대답보다 약간 깔끔한 것 (효과적으로 동일한 일을하지만)은 다음과 같이 hasattr ()를 사용하는 것입니다.

>>> hasattr(X, 'children')
False
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top