كيفية معرفة ما إذا لم يتم تحميل علاقة كسول بعد، مع SQLAlchemy؟

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

  •  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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top