Sqlalchemy와 함께 게으른 관계가 아직로드되지 않았는지 알아내는 방법은 무엇입니까?
-
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
제휴하지 않습니다 StackOverflow