Como descobrir se uma relação preguiçoso não é carregado ainda, com SQLAlchemy?
-
06-07-2019 - |
Pergunta
Com SQLAlchemy, há uma maneira de saber de antemão se uma relação seria lazy-carregado?
Por exemplo, dado um preguiçoso pai-> crianças relação e uma instância X de "pai", eu gostaria de saber se "X.children" já está carregado, sem disparar a consulta.
Solução
Eu acho que você poderia olhar dicionário atributo __dict__
da criança para verificar se os dados já estão lá ou não.
Outras dicas
Você pode obter uma lista de todas as propriedades descarregados (ambas as relações e colunas) da sqlalchemy.orm.attributes.instance_state(obj).unloaded
.
Veja: Completando objeto com suas relações e evitando consultas desnecessárias em sqlalchemy
Uma maneira mais fácil é usar inspect()
, que dá os mesmos resultados:
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
Um pouco mais puro do que resposta Haes (embora ele efetivamente faz a mesma coisa) é usar hasattr (), como em:
>>> hasattr(X, 'children')
False