Como descobrir se uma relação preguiçoso não é carregado ainda, com SQLAlchemy?

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

  •  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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top