SQLAlchemy ile bir ilişkinin tembel yüklü olup olmadığını önceden bilmenin bir yolu var mı?
Örneğin, tembel bir ebeveyn -> çocuk ilişkisi ve "ebeveyn" in bir örneği verildiğinde, soruyu tetiklemeden "X.children" in yüklü olup olmadığını bilmek istiyorum.SQLAlchemy ile tembel bir ilişkinin henüz yüklenmediğini nasıl öğrenebilirim?
cevap
Verilerin zaten var olup olmadığını kontrol etmek için çocuğun __dict__
öznitelik sözlüğüne bakabileceğinizi düşünüyorum.
(etkin aynı şeyi yapar gerçi) olduğu gibi) hasattr (kullanmaktır Haes cevap biraz daha neater:
>>> hasattr(X, 'children')
False
Güzel, teşekkürler :) – Joril
Mevcut sqlalchemy. 'hasattr (obj, field) 'nesneye değil, obj .__ dict__'. –
SQLAlchemy 0.8'de test ettim ve bu nesne ayrılırsa işe yarar. Ancak ekliyse, hasattr kullanarak "çocuk" tembel yükünü tetikler, ki bu muhtemelen sizin istediğinizi değil. Bunun yerine, 0,8'de inspect() çağrısını kullanabiliriz: 'res = inspect (X)' '' res.unloaded' içinde '' - nesnenin takılı mı yoksa bağımsız mı olduğu çalışır. – foz
Hepiniz yüksüz özelliklerin bir listesini alabilirsiniz (ilişkiler ve sütunlar her ikisi de) sqlalchemy.orm.attributes.instance_state(obj).unloaded
'dan.
Bkz: Completing object with its relations and avoiding unnecessary queries in sqlalchemy
daha kolay bir yolu aynı sonuçları verir inspect()
, kullanmaktır: Bu çalışmaz
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
O inşaat, thanks :) – Joril