SQLAlchemy: العلاقة في المخططون بتجميع نتيجة وظيفة بدلا من استدعاء الدالة عندما يتم الاستعلام عن العلاقة
-
08-07-2019 - |
سؤال
ولدي عدد من مصممي الخرائط التي تبدو مثل هذا:
mapper(Photo,photo_table, properties = { "locale": relation(PhotoContent, uselist=False, primaryjoin=and_(photo_content_table.c.photoId == photo_table.c.id, photo_content_table.c.locale == get_lang()), foreign_keys=[photo_content_table.c.photoId, photo_content_table.c.locale])
ولقد نشر في أبراج، يجب على وظيفة حتى get_lang () ترجع إما "أون" أو "وفاق" على أساس الدورة الحالية.
from pylons.i18n import get_lang
والمشكلة هي أن يجمع SA ان "لغة" العلاقة مع النتيجة التي أرجعها get_lang () في وقت الترجمة. حتى لو كنت تفعل شيئا مثل هذا:
meta.Session.query(Photo).options(eagerload('locale')).get(id)
والعلاقة لا يدعو get_lang (). ويستخدم فقط مهما كانت قيمة get_lang () في وقت الترجمة.
وأي شخص يحصل على أي أفكار كيفية تنفيذ eagerloaders SQLAlchemy التي هي دينامية؟ وهذا من شأنه ان يكون المنقذ بالنسبة لي!
المحلول
ويعدم البيانات المتعلقة عندما يتم تحميل الطبقة، وهو ما يعني كل استدعاء دالة يحصل على تقييم.
وحاول تمرير وظيفة بدلا من ذلك:
and_(photo_content_table.c.photoId == photo_table.c.id, photo_content_table.c.locale == get_lang)
لاحظ قوسين مفقود. الآن يجب ان تحصل على تقييم كلما يحصل الاستعلام العلاقة.
لا تنتمي إلى StackOverflow