كيفية معرفة ما إذا لم يتم تحميل علاقة كسول بعد، مع 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